为什么此代码仅更改列表的某些元素,而不更改其他元素?

时间:2019-05-30 13:57:16

标签: python list slice

我不明白为什么以下代码的结果是[1,[2,5]]而不是[3,[2,5]]。为什么子列表中的元素已更改,但子列表外部的元素未更改?

我是Python的新手,所以也许我看不到应该很明显的东西。我已经读过有关深层和浅层副本的信息,但这并没有帮助。

a = [1,[2,3]]
b = a[:]
a[0] = 3
a[1][1] = 5
print(b)

我在第2行上创建了列表切片,但是由于它没有开始或结束值,因此切片等于整个列表,对吗?那么为什么3变为5,而1保持不变?

1 个答案:

答案 0 :(得分:0)

因为在Python中,每个列表都是一个独立的对象。 您可以使用“复制”模块进行深度复制以解决此特定问题。

import copy
a = [1,[2,3]]
b = copy.deepcopy(a)
a[0] = 3
a[1][1] = 5
print(b)

结果:[1,[2、3]]