情况:在制作原始列表的副本后,我使用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()
答案 0 :(得分:2)
some_list[:]
只是一个浅层副本。你似乎需要一份深刻的副本
from copy import deepcopy
copy = deepcopy(some_list)
修改强>
要理解为什么"一个物体影响另一个物体"看一下每个列表的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
中的original
列表与id
中的shallow
相同。这意味着嵌套列表是完全相同的对象。修改一个嵌套列表时,更改也位于另一个列表中。
id
的{{1}}不同。那只是副本。更改它们不会影响原始列表。