目前位置: 首页 » python入门 »正文

python中a=b和a=b[:]的区别

今天在做一个算法题 的时候 ,入坑了,就是因为忽视了a=b和a=b[:]的区别。

实际上很好理解。

测试下面这些代码就了解了。

a=[1,2,3,4,6]
b=a[:]      #复制一个新的列表b,并且元素一样
c=a         #让c和a指向于同一个列表对象
d=a.copy()     #复制一个新的列表d,并且元素一样

>>print(a,b,c,d)

输出结果:[1, 2, 3, 4, 6] [1, 2, 3, 4, 6] [1, 2, 3, 4, 6] [1, 2, 3, 4, 6]

a,b,c,d输出的结果全部一样

>>print(id(a),id(b),id(c),id(d))

输出结果:2574407433344 2574407516864 2574407433344 2574407493696

可以看到a和c的id值是一样的,说明是指向于同一个对象

而b以及d是复制而来的新对象列表,所以id值全不相同

a.remove(6) #从a列表中移除6这个元素
>>print(a,b,c,d)

输出结果:[1, 2, 3, 4] [1, 2, 3, 4, 6] [1, 2, 3, 4] [1, 2, 3, 4, 6]

可以看到a和c列表中的结果保持了致。虽然我们没有删除c列表中的元素,但c列表中的元素6也被删除了。

也说明a和c是指向于同一个对象

b和d则不受影响!

不知道这样解释后,你明白了不?
a=b,表示a和b指向于同一个对象
a=b[:],复制新建一个新的对象

我反正是明白了!

推荐阅读