请问python中这两个代码有什么区别:
white=[2,4,8,9]
black = white
和
white=[2,4,8,9]
black = white[:]
非常感谢你。
答案 0 :(得分:7)
第一个将对列表white
的引用复制到变量black
因此black
的任何更改也会改变white
,反之亦然
将其视为white
第二个将列表white
的内容复制到变量black
,可能写得更好
black = list(white)
在这种情况下,两个变量black
和white
之间没有任何关联,因为它是white
的内容被复制而不是对white
本身的引用
额外考虑以下相关评论(感谢Jon Clements):您可以在此处阅读有关深拷贝与浅拷贝的更多信息Understanding dict.copy() - shallow or deep?
答案 1 :(得分:5)
您可以使用id()
和is
查看Python shell中的差异:
>>> white=[2,4,8,9]
>>> black = white
>>> id(white)
41026064
>>> id(black)
41026064
>>> black is white
True
black
和white
指向同一个对象,因此它们不是两个,它们是一个。制作切片(或浅)副本时,会创建一个新对象。
>>> white=[2,4,8,9]
>>> black = white[:]
>>> id(white)
41026064
>>> id(black)
41025904
>>> black is white
False
答案 2 :(得分:0)
作为一个额外的数据点,Python 3.3添加了copy
方法作为切片语法的可读替代方法。因此,white.copy()
还会创建列表white