当前位置:实例文章 » 其他实例» [文章]python的浅拷贝和深拷贝

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()` 函数来实现浅拷贝和深拷贝。

相关标签:python开发语言
其他信息

其他资源

Top