今天在做一个算法题 的时候 ,入坑了,就是因为忽视了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[:],复制新建一个新的对象
我反正是明白了!
标签: