Python中列表赋值后修改listTwo为何listOne同步变化?求解答
为啥修改listTwo后listOne也跟着变了?
嘿,刚学Python遇到这个问题太正常了,我来给你讲明白到底咋回事~
先看你写的这段代码:
listOne = [1, 2, 3] listTwo = listOne print(listOne) #[1, 2, 3] listTwo.append(4) print(listOne) #[1, 2, 3, 4] print(listTwo) #[1, 2, 3, 4]
核心原因是:Python里的列表是「可变对象」,赋值操作传递的是对象的引用,不是元素的副本。
给你打个生活化的比方:你有一本写着[1,2,3]的笔记本,listOne = [1,2,3]就相当于给这本笔记本配了一把叫listOne的钥匙。然后listTwo = listOne呢?不是给你复制了一本新笔记本,而是又配了一把和listOne一样的钥匙,叫listTwo。
所以不管你用listOne还是listTwo的钥匙打开笔记本,往里面加个4,另一把钥匙打开时看到的肯定也是修改后的笔记本呀~
那如果想让listTwo和listOne各自独立,改一个不影响另一个,该怎么做?给你几个常用方法:
- 用切片生成副本:
listTwo = listOne[:] - 用list构造函数创建新列表:
listTwo = list(listOne) - 用copy模块的浅拷贝:
import copy; listTwo = copy.copy(listOne)(如果列表里还有嵌套的可变对象,就得用copy.deepcopy()来深拷贝啦)
这样操作后,listTwo就指向了一本全新的笔记本,和原来的listOne彻底分开,再修改就不会互相影响咯~
内容的提问来源于stack exchange,提问作者nayakanti samyuktha
相关产品推荐
相关产品推荐

