Python中如何避免修改赋值自另一列表的变量时改动原列表
为什么修改b会同步修改a
Python中的列表属于可变对象,b = a这行代码并没有创建新的列表,只是让变量b也指向了变量a对应的列表内存地址,两个变量本质是同一个列表的不同别名。因此对b执行append修改列表内容时,a读取到的也是同一个被修改后的列表,最终输出结果一致。
避免关联修改的方案
根据列表的结构不同,可以选择不同的拷贝方式生成独立的新列表:
- 如果是元素全为数字、字符串这类不可变类型的一维列表,用浅拷贝即可实现隔离:
- 切片拷贝:
b = a[:] - list构造器拷贝:
b = list(a) - copy模块浅拷贝:
import copy b = copy.copy(a)
- 切片拷贝:
- 如果列表内部包含嵌套的列表、字典等可变对象,需要用深拷贝才能完全避免双向影响:
深拷贝会递归复制所有层级的可变对象,新列表和原列表完全独立,修改任意一个都不会影响另一个。import copy b = copy.deepcopy(a)
内容的提问来源于stack exchange,提问作者Michael Davis
相关产品推荐
相关产品推荐

