Python列表赋值后删除元素同步影响原列表:Bug还是特性?
为什么修改赋值后的列表变量会影响原列表?
嗨,这绝对不是Bug,而是Python里可变对象赋值的核心特性——很多刚接触Python的朋友都会踩这个坑,我当初刚学的时候也懵了好一会儿😅
先看你给出的代码:
array1 = ['a','b','c'] test = array1 del test[2] print(test) print(array1)
实际输出确实是['a', 'b']和['a', 'b'],原因其实很简单:
在Python中,列表(list)属于可变对象。当你执行test = array1这行代码时,并不是把array1里的元素复制一份给test,而是让test这个变量和array1指向了内存中同一个列表对象。打个通俗的比方:就像两个人拿着同一扇房间的钥匙,不管谁用钥匙进门修改房间里的东西,另一个人开门看到的都是修改后的状态。
如果想要修改test的同时不影响原列表array1,你需要创建原列表的独立副本,常见的方法有这几种:
- 切片法:
test = array1[:](通过切片获取整个列表的副本) - 构造函数法:
test = list(array1)(用list构造函数生成新列表) copy模块法:import copy; test = copy.copy(array1)(使用标准库的copy方法)
内容的提问来源于stack exchange,提问作者magicapples
相关产品推荐
相关产品推荐

