Python列表浅拷贝疑问:修改原列表后为何新列表输出不符合预期?
为什么修改a的不同元素会对b产生不同影响?
先看你的代码:
a=[10, 23, 56, [78]] b=list(a) a[3][0]=95 a[1]=34 print(b) # 输出结果:[10, 23, 56, [95]]
核心原因在于list(a)做的是浅拷贝,它对列表里的不同类型元素处理逻辑不一样:
- 像
10、23这种整数属于不可变类型,浅拷贝时会把数值直接复制一份给b对应的位置。当你把a[1]改成34,只是给a的第1个位置换了个新的整数对象,b的第1个位置还是原来的23,所以不会跟着变。 - 而
[78]这种嵌套列表属于可变类型,浅拷贝时并不会复制这个子列表的内容,只是把指向这个子列表的引用复制给b[3]。也就是说,a[3]和b[3]其实指向内存里同一个子列表。所以你修改a[3][0]的时候,是直接改了这个共享的子列表内容,b自然也会看到这个变化。
简单说:浅拷贝对不可变元素是“值复制”,对可变元素是“引用复制”,这就是两种修改产生不同结果的原因。
内容的提问来源于stack exchange,提问作者Deepu Kumar
相关产品推荐
相关产品推荐

