首页 > 解决方案 > 为什么此代码仅更改列表的某些元素而不更改其他元素?

问题描述

我不明白为什么以下代码的结果是[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 却保持不变呢?

标签: pythonlistslice

解决方案


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

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

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


推荐阅读