首页 > 解决方案 > 如何使两个列表在python3中不共享它们的值

问题描述

在下面运行此代码后,

a = ['x', 'y', 'z']
b = a
c = a
t = 'A'

b[0] = t + c[0]

b 是['Ax', 'y', 'z'],c 也是['Ax', 'y', 'z']

如何使两个列表不共享它们的值?

标签: python-3.x

解决方案


您需要复制 a,否则您只是说 b 指向与 a 相同的对象,并且与 c 相同。你可以通过两种方式做到这一点

b=a.copy
c=list(a)

编辑:为您提供更多细节。当您使用等号将变量分配给 python 中的对象时,就像在带有变量名称的对象上粘贴便利贴一样。您创建了一个列表对象并将名称“a”粘贴到它上面。然后,您将名称“b”和“c”粘贴到同一个对象上。在这种情况下,基本上只有一个列表对象,它只有三个名称。该copy方法创建与第一个对象相同的第二个对象。该list函数返回一个新列表。如果你给它一个列表作为输入,它本质上只是另一种复制方式。

值得注意的是,如果列表包含其他对象(例如列表列表),则不会复制这些对象。为此,您应该使用deepcopy.


推荐阅读