美文网首页
python 中 List[:]的作用

python 中 List[:]的作用

作者: 教训小磊 | 来源:发表于2022-11-05 11:23 被阅读0次

    看如下代码:

    a=[1,2,3]
    b=a
    b[0]=111
    print(a)  #输出:[111, 2, 3]
    

    可以看到在修改b的时候a也被修改了。
    查看它们的地址可以看到:

    a=[1,2,3]
    b=a
    print(id(a))     #2683539037576
    print((id(b)))   #2683539037576
    

    可以看到a和b的地址是一样的,语句b=a,就是将列表a的首地址给了b,换句话说就是a和b都指向地址2683539037576,所以在b对这块地址的内容修改时,就相当于修改了a的数据,道理跟C语言一样。

    那如何既要a中的数据又在后期不改变a的数据呢:
    一个是使用list.copy()
    一个是使用list[:]
    这两个意思相同,以第二种为例:

    a=[1,2,3]
    b=a[:]
    print(id(a))     #1732961443208
    print((id(b)))  #1732961440072
    b[0]=111
    print(a)        #[1, 2, 3]
    

    语句b=a[:]之后,a和b的指向不一样,所以当修改b中的内容时,a不受影响。
    b=a[:],就相当于对b重新malloc了一块内存,然后将a中的数据拷贝过去了,翻译到C代码如下:

    #python
    b=a[:]
    
    #C语言,数组是int型为例
    int *b;
    int len=sizeof(a)/sizeof(a[0]);
    b=(int*)malloc(len*sizeof(int));
    memcpy(b,a,len*sizeof(int));
    

    相关文章

      网友评论

          本文标题:python 中 List[:]的作用

          本文链接:https://www.haomeiwen.com/subject/bjjptdtx.html