2

请问python中这两个代码有什么区别:

white=[2,4,8,9]
black = white

white=[2,4,8,9]
black = white[:]

太感谢了。

4

3 回答 3

8

第一个复制对列表的引用到white变量black

所以任何改变black也会改变white,反之亦然

将其视为别名或昵称white

第二个将列表的内容复制white到变量black中,这样写可能更好

black = list(white)

在这种情况下,两个变量之间没有联系blackwhite因为它是white复制的内容而不是对white自身的引用。

额外考虑下面的相关评论(感谢 Jon Clements):您可以在此处阅读有关深拷贝与浅拷贝的更多信息了解 dict.copy() - 浅拷贝还是深拷贝?

于 2013-07-13T13:40:11.390 回答
5

您可以使用id()andis来查看 Python shell 的不同之处:

>>> white=[2,4,8,9]
>>> black = white
>>> id(white)
41026064
>>> id(black)
41026064
>>> black is white
True

blackwhite指向同一个对象,所以它们不是两件事,而是一件事。当您制作切片(或浅)副本时,会创建一个新对象。

>>> white=[2,4,8,9]
>>> black = white[:]
>>> id(white)
41026064
>>> id(black)
41025904
>>> black is white
False
于 2013-07-13T15:55:28.027 回答
0

作为一个额外的数据点,Python 3.3 添加了该copy方法作为切片语​​法的可读替代方案。所以white.copy()也创建了列表的浅拷贝white

于 2013-07-13T16:02:16.630 回答