一个列表在不修改i的情况下被更新

2024-05-08 16:17:11 发布

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

我的问题是,当我创建一个列表时,使用“a”并将其内容复制到另一个列表c中

c=a[:]

现在,当我调用一个函数对“a”进行数字排序时,我对它进行了排序,但是“c”的值也进行了转换,即使我对“c”没有做任何更改 输入和输出请参考图片! 提前谢谢

enter image description here


Tags: 函数内容列表排序图片数字
3条回答

问题是这行:d[i][j] = int(d[i][j])。这会修改a,因为d没有被复制。这也会修改c,因为只有列表被复制,而不是列表的元素,所以修改它们会同时修改两个列表。要解决这个问题,您可以像其他答案所说的那样,deepcopy它,或者只使用c = [element[:] for element in a]。你知道吗

这是因为c = a[:]复制顶级列表,但其中的项是对相同子列表的引用。如果要避免这种行为,可以进行深度复制:

from copy import deepcopy
c = deepcopy(a)

奇怪的是,它不应该改变:

>>> a=[1,4,5,7,22,41,4,-5,66,22,12]
>>> c=a[:]
>>> a.sort()
>>> a
[-5, 1, 4, 4, 5, 7, 12, 22, 22, 41, 66]
>>> c
[1, 4, 5, 7, 22, 41, 4, -5, 66, 22, 12]

您也可以尝试用c = list(a)来实现这一点。在这两种情况下,都是按值而不是按引用复制数组。你知道吗

不过,您应该知道,这两种方法对于可变对象的集合有限制,因为内部对象保持其引用完好无损。因此,如果您想要完整的副本,可以使用copy.deepcopy并按如下方式使用:

>>> from copy import deepcopy
>>> a = [[1,2],[3],[4]]
>>> c = deepcopy(a)

相关问题 更多 >

    热门问题