从一个列表中删除会影响其复制的内容[python 2.7]

时间:2018-11-15 08:23:43

标签: python-2.7 list deep-copy shallow-copy

我创建了一个列表副本。 从一个副本中删除一项后,它也会从原始副本中删除。

a = ['alpha', 'beta', 'gamma', 'delta']
b = a

b.remove('alpha')

print 'A list is', a
print 'B list is', b

我应该如何创建列表的独立副本,而不会影响原始副本?

最新添加

要了解此错误的原因,请参考浅拷贝和深拷贝Python documentation - 8.17. copy

  

浅复制和深复制之间的区别仅与复合对象(包含其他对象的对象,如列表或类实例)有关:

     
      
  • 浅表副本会构造一个新的复合对象,然后(在可能的范围内)将对原始对象中引用的对象的引用插入其中。
  •   
  • 深层副本会构造一个新的复合对象,然后递归地将原始对象中的对象的副本插入其中。
  •   

1 个答案:

答案 0 :(得分:1)

您可以使用内置的复制模块。

import copy
a = ['alpha', 'beta', 'gamma', 'delta']
# it will perform the shallow copy
b = copy.copy(a)

b.remove('alpha')

print 'A list is', a
print 'B list is', b

对于Python3.x。虽然, copy 模块在Python3.x中可用

a = ['alpha', 'beta', 'gamma', 'delta']
b = a.copy()

b.remove('alpha')

print('A list is', a)
print('B list is', b)

希望这会有所帮助