情况:制作原始列表的副本后,我使用 pop 修改所述副本。事实证明,原始列表受到了更改的影响。
我什至在检查原始列表和副本不是同一对象后,弹出副本的元素将弹出原始列表中的相同元素。
请参阅下面的脚本示例。在此先感谢您的帮助。
l = [['1412898', 'Jack', 'headache med', '8ET-500'],
['1423859', 'Sonny', 'prostate med', '8ET-800'],
['1413836', 'Paco', 'headache med', '8ET-500']]
class App(object):
def __init__(self, info):
self.fp_rows= info
def sortbyauditor(self):
self.fp_rows_copy = self.fp_rows[:]
print self.fp_rows is self.fp_rows_copy
for i in self.fp_rows_copy:
i.pop(1)
print self.fp_rows_copy
print self.fp_rows
app= App(l)
app.sortbyauditor()
some_list[:]
只是一个浅拷贝。你似乎需要一个深拷贝
from copy import deepcopy
copy = deepcopy(some_list)
Edit
要理解为什么“一个对象会影响另一个对象”,请查看id
每个列表的:
original = [[1, 2], [3, 4]]
shallow = original[:]
deep = deepcopy(original)
print([id(l) for l in original])
# [2122937089096, 2122937087880]
print([id(l) for l in shallow])
# [2122937089096, 2122937087880]
print([id(l) for l in deep])
# [2122937088968, 2122937089672]
您可以看到id
列表中的 soriginal
与id
s in shallow
。这意味着嵌套列表是完全相同的对象。当您修改一个嵌套列表时,更改也会出现在另一列表中。
The id
s for deep
是不同的。那只是副本。更改它们不会影响原始列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)