文章目录
- 引言:列表的注意事项
- 1 list中的浅拷贝与深拷贝
- 1.1浅拷贝(Shallow Copy)
- 浅拷贝的方法
- 浅拷贝的效果
- 1.2深拷贝(Deep Copy)
- 深拷贝的方法
- 深拷贝的效果
- 1.3 总结:浅拷贝 vs 深拷贝
- 1.4 为什么浅拷贝顶层元素如果是不可变数据就不能共享,不是传的是引用就相当于传的是地址吗?
- (1) 不可变数据类型与浅拷贝的关系
- (2) 引用传递和共享
- (3) 对于不可变对象
- (4)对可变对象的影响
- 一、
- 二、
引言:列表的注意事项
1 list中的浅拷贝与深拷贝
在 Python 中,列表的浅拷贝和深拷贝是两种不同的复制方法,它们在数据的引用和内存管理方面有显著差异。理解这两种拷贝方式对于避免不必要的副作用和确保数据独立性至关重要。
1.1浅拷贝(Shallow Copy)
浅拷贝创建一个新的列表对象,但新的列表中的元素是对原始列表中元素的引用。因此,浅拷贝后的列表本质上是与原列表共享数据的视图。如果原列表中的元素是可变对象,修改其中一个列表中的对象会影响到另一个列表,因为它们指向相同的内存地址。
浅拷贝的方法
-
使用
list()
函数:original_list = [1, 2, [3, 4]] shallow_copy = list(original_list)
-
使用切片
[:]
:以后记住列表切片本质上就是浅拷贝original_list = [1, 2, [3, 4]] shallow_copy = original_list[:]
-
使用
copy
模块的copy()
函数:import copy original_list = [1, 2, [3, 4]] shallow_copy = copy.copy(original_list)
浅拷贝的效果
浅拷贝后的列表 shallow_copy
和原列表 original_list
共享内部的可变对象,如嵌套列表。这意味着对这些共享的可变对象的修改会在两个列表中都反映出来。
import copyoriginal_list = [1, 2, [3, 4]]
shallow_copy = copy.copy(original_list)# 修改原列表中的可变对象
original_list[2][0