python列表.pop()修改原始列表(不仅仅是复制)

2024-10-03 19:22:38 发布

您现在位置:Python中文网/ 问答频道 /正文

情境:复制原始列表后,我使用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()

Tags: selfinfoapp元素列表def副本med
1条回答
网友
1楼 · 发布于 2024-10-03 19:22:38

some_list[:]只是一个浅拷贝。你好像需要一份很深的复印件

from copy import deepcopy

copy = deepcopy(some_list)

编辑

要理解“一个对象影响另一个对象”的原因,请查看每个列表的id

^{pr2}$

您可以看到original中列表的idshallow中的id是相同的。这意味着嵌套的对象是相同的。修改一个嵌套列表时,更改也会出现在另一个列表中。在

deepid是不同的。那只是复印件。更改它们不会影响原始列表。在

相关问题 更多 >