2024-05-08 16:17:11 发布
网友
我的问题是,当我创建一个列表时,使用“a”并将其内容复制到另一个列表c中
c=a[:]
现在,当我调用一个函数对“a”进行数字排序时,我对它进行了排序,但是“c”的值也进行了转换,即使我对“c”没有做任何更改 输入和输出请参考图片! 提前谢谢
问题是这行:d[i][j] = int(d[i][j])。这会修改a,因为d没有被复制。这也会修改c,因为只有列表被复制,而不是列表的元素,所以修改它们会同时修改两个列表。要解决这个问题,您可以像其他答案所说的那样,deepcopy它,或者只使用c = [element[:] for element in a]。你知道吗
d[i][j] = int(d[i][j])
a
c
deepcopy
c = [element[:] for element in a]
这是因为c = 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)来实现这一点。在这两种情况下,都是按值而不是按引用复制数组。你知道吗
c = list(a)
不过,您应该知道,这两种方法对于可变对象的集合有限制,因为内部对象保持其引用完好无损。因此,如果您想要完整的副本,可以使用copy.deepcopy并按如下方式使用:
>>> from copy import deepcopy >>> a = [[1,2],[3],[4]] >>> c = deepcopy(a)
问题是这行:
d[i][j] = int(d[i][j])
。这会修改a
,因为d没有被复制。这也会修改c
,因为只有列表被复制,而不是列表的元素,所以修改它们会同时修改两个列表。要解决这个问题,您可以像其他答案所说的那样,deepcopy
它,或者只使用c = [element[:] for element in a]
。你知道吗这是因为
c = a[:]
复制顶级列表,但其中的项是对相同子列表的引用。如果要避免这种行为,可以进行深度复制:奇怪的是,它不应该改变:
您也可以尝试用
c = list(a)
来实现这一点。在这两种情况下,都是按值而不是按引用复制数组。你知道吗不过,您应该知道,这两种方法对于可变对象的集合有限制,因为内部对象保持其引用完好无损。因此,如果您想要完整的副本,可以使用copy.deepcopy并按如下方式使用:
相关问题 更多 >
编程相关推荐