在 Python 中,直接赋值、浅复制和深复制是处理对象和数据结构(如列表、字典等)时的三种基本方式。理解它们的区别对于避免数据篡改和保持数据完整性非常重要。
注意这里说的这几种操作只针对对象和数据结构,而非比如单个数值的非对象数据。
以下是它们的详细讲解:
1. 直接赋值(Direct Assignment)
机制
- 引用相同对象:直接赋值不会创建新对象,而是让新变量指向原始对象的内存地址。两个变量实际引用了同一个对象。
- 内存共享:修改任意一个变量会影响到另一个变量,因为它们共享相同的内存位置。
示例
x = [1, 2, 3]
y = x # 直接赋值
y[0] = 100
print(x) # 输出 [100, 2, 3]
print(y) # 输出 [100, 2, 3]
在这个例子中,x
和 y
指向相同的列表对象,因此修改 y
也会修改 x
。
应用场景
- 适用于需要两个变量同时引用同一个对象的场景。
- 快速共享数据而不需额外开销。
2. 浅复制(Shallow Copy)
机制
- 复制外层对象:浅复制创建一个新的对象,但只复制了原始对象的外层结构。对于嵌套对象(如列表中的列表),它只复制引用,而不是递归复制内部对象。
- 部分独立:新对象的顶层结构独立,但嵌套结构仍然共享。
示例
使用 .copy()
或 copy.copy()
(针对通用对象)
import copy
x = [<