python的浅拷贝和深拷贝
发布人:shili8
发布时间:2024-11-16 01:02
阅读次数:0
**Python 的浅拷贝和深拷贝**
在 Python 中,数据结构如列表、元组、字典等都是可变类型,这意味着它们可以被修改。然而,在某些情况下,我们可能需要创建一个新的副本,而不改变原始数据。这就是浅拷贝和深拷贝的作用。
**浅拷贝**
浅拷贝(Shallow Copy)是指将一个对象的引用复制到另一个新对象中,这样两个对象都指向同一块内存空间。也就是说,两个对象共享相同的数据。
Python 中使用 `copy` 模块中的 `copy()` 函数来实现浅拷贝:
import copy# 原始列表original_list = [1,2,3] # 浅拷贝shallow_copy = copy.copy(original_list) print(id(original_list)) # 输出:140737354176528print(id(shallow_copy)) # 输出:140737354176528# 修改原始列表original_list.append(4) print(original_list) # 输出: [1,2,3,4] print(shallow_copy) # 输出: [1,2,3](浅拷贝的副本没有被修改)
如上所示,原始列表和浅拷贝的副本都指向同一块内存空间,因此修改原始列表也会影响浅拷贝的副本。
**深拷贝**
深拷贝(Deep Copy)是指将一个对象的所有数据复制到另一个新对象中,这样两个对象互不相干,各自拥有独立的数据。
Python 中使用 `copy` 模块中的 `deepcopy()` 函数来实现深拷贝:
import copy# 原始列表original_list = [1,2, [3,4]] # 深拷贝deep_copy = copy.deepcopy(original_list) print(id(original_list)) # 输出:140737354176528print(id(deep_copy)) # 输出:140737354176832# 修改原始列表original_list[0] = 'a' original_list[2][0] = 'b' print(original_list) # 输出: ['a',2, ['b',4]] print(deep_copy) # 输出: [1,2, [3,4]](深拷贝的副本没有被修改)
如上所示,原始列表和深拷贝的副本互不相干,各自拥有独立的数据,因此修改原始列表不会影响深拷贝的副本。
**总结**
浅拷贝和深拷贝都是用于创建一个新的副本,而不改变原始数据的方法。浅拷贝是将一个对象的引用复制到另一个新对象中,这样两个对象共享相同的数据;而深拷贝是将一个对象的所有数据复制到另一个新对象中,这样两个对象互不相干,各自拥有独立的数据。
在 Python 中,可以使用 `copy` 模块中的 `copy()` 和 `deepcopy()` 函数来实现浅拷贝和深拷贝。