在python中复制一个列表

时间:2013-07-13 12:37:24

标签: python list

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

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

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

非常感谢你。

3 个答案:

答案 0 :(得分:7)

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

因此black的任何更改也会改变white,反之亦然

将其视为white

的别名或昵称

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

black = list(white)

在这种情况下,两个变量blackwhite之间没有任何关联,因为它是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

blackwhite指向同一个对象,因此它们不是两个,它们是一个。制作切片(或浅)副本时,会创建一个新对象。

>>> 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

的浅表副本