为何更新列表值时行为存在差异?含单元素子列表的列表案例
问题解析:Python列表浅拷贝的元素差异
示例代码
x = [1,3,6,[18]] y = list(x) print(y) x[3][0] = 15 x[1] = 12 print(x) print(y)
现象说明
运行上述代码后会发现:修改x[3][0](嵌套列表内的元素)时,y对应位置的值会同步变化;但修改x[1](列表中的整数元素)时,y里的y[1]仍为原数值3,不会同步更新。
原因分析
这是因为list(x)执行的是浅拷贝,而非深拷贝:
- 对于列表中的不可变元素(如整数、字符串、元组),浅拷贝会复制元素的独立引用。
x[1]是整数3,y[1]存的是指向3的新引用。当执行x[1] = 12时,只是把x列表的第2个位置替换为指向12的新引用,完全不影响y列表对应位置的引用,因此y[1]保持原数值。 - 对于列表中的可变元素(如嵌套列表、字典),浅拷贝仅复制该可变元素的引用,不会复制整个元素对象。
x[3]和y[3]指向同一个嵌套列表,因此修改该嵌套列表内部的元素(如x[3][0] = 15),通过x或y访问这个嵌套列表时,看到的都是修改后的结果。
内容的提问来源于stack exchange,提问作者Maniks
相关产品推荐
相关产品推荐

