python对象拷贝

在 Python 中,对象的拷贝方式主要有三种:浅拷贝(shallow copy)、深拷贝(deep copy)、以及直接赋值。每种方式的行为有所不同,特别是在处理嵌套对象时。

1. 直接赋值

直接赋值并不会拷贝对象,而是创建一个新的引用,指向同一个对象。因此,改变对象的内容会影响所有引用。

# 直接赋值
a = [1, 2, 3]
b = a  # b 是 a 的引用
b[0] = 99

print(a)  # 输出: [99, 2, 3]
print(b)  # 输出: [99, 2, 3]

2. 浅拷贝(shallow copy)

浅拷贝会创建一个新的对象,但只复制顶层对象,不会递归复制嵌套的对象。因此,嵌套对象仍然是原始对象的引用。

方法1:使用 copy 模块中的 copy() 函数
import copy

a = [1, 2, [3, 4]]
b = copy.copy(a)  # 浅拷贝

b[0] = 99
b[2][0] = 100

print(a)  # 输出: [1, 2, [100, 4]]
print(b)  # 输出: [99, 2, [100, 4]]
方法2:使用列表的 copy() 方法(仅适用于列表)
a = [1, 2, [3, 4]]
b = a.copy()  # 浅拷贝

b[0] = 99
b[2][0] = 100

print(a)  # 输出: [1, 2, [100, 4]]
print(b)  # 输出: [99, 2, [100, 4]]

3. 深拷贝(deep copy)

深拷贝会递归地复制对象以及其包含的所有嵌套对象,创建一个完全独立的副本。修改深拷贝后的对象不会影响原对象。

import copy

a = [1, 2, [3, 4]]
b = copy.deepcopy(a)  # 深拷贝

b[0] = 99
b[2][0] = 100

print(a)  # 输出: [1, 2, [3, 4]]
print(b)  # 输出: [99, 2, [100, 4]]

4. 总结

  • 直接赋值:创建引用,所有引用指向同一个对象。
  • 浅拷贝:复制顶层对象,不复制嵌套对象,嵌套对象仍然是原始对象的引用。
  • 深拷贝:递归地复制对象及其嵌套对象,创建一个完全独立的副本。

这三种方法各有其适用场景,选择哪种取决于对象的复杂性和是否需要完全独立的副本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值