【问题标题】:Remove from one list impact it's copy [python 2.7] [duplicate]从一个列表中删除影响它的副本 [python 2.7] [重复]
【发布时间】:2019-04-18 07:11:09
【问题描述】:

我创建了一个列表的副本。 当一个项目从一个副本中删除时 - 它也从原始副本中删除。

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 没有任何评论 - 这没有帮助。如果您认为该问题无关紧要、错误或无用 - 请解释(或相应标记)

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


【解决方案1】:

您可以使用内置的copy模块。

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)

希望对你有帮助

【讨论】:

  • 谢谢,虽然我仍然不明白为什么这是预期的行为 - 它给了我一个解决方案。
猜你喜欢
  • 1970-01-01
  • 2021-03-08
  • 2014-06-01
  • 2017-03-12
  • 1970-01-01
  • 2012-07-11
  • 2016-06-13
  • 2013-08-14
  • 2018-10-12
相关资源
最近更新 更多