请问python中这两个代码有什么区别:
white=[2,4,8,9]
black = white
和
white=[2,4,8,9]
black = white[:]
太感谢了。
第一个复制对列表的引用到white
变量black
所以任何改变black
也会改变white
,反之亦然
将其视为别名或昵称white
第二个将列表的内容复制white
到变量black
中,这样写可能更好
black = list(white)
在这种情况下,两个变量之间没有联系black
,white
因为它是white
复制的内容而不是对white
自身的引用。
额外考虑下面的相关评论(感谢 Jon Clements):您可以在此处阅读有关深拷贝与浅拷贝的更多信息了解 dict.copy() - 浅拷贝还是深拷贝?
您可以使用id()
andis
来查看 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
作为一个额外的数据点,Python 3.3 添加了该copy
方法作为切片语法的可读替代方案。所以white.copy()
也创建了列表的浅拷贝white