python学习笔记(二):浅拷贝与深拷贝

python学习笔记(二):浅拷贝与深拷贝

概括

举例类型解释
b = a:赋值引用a 和 b 都指向同一个对象。
b = a.copy()或b=copy.copy(a)浅拷贝,a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
b = copy.deepcopy(a):深度拷贝,a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

几个例子

*id()返回对象的内存地址

直接赋值

代码:

a = [1,2,3]
b = a

print(id(a))
print(id(b))

b[0] = 514
print(a)

输出:

2361178739080
2361178739080
[514, 2, 3]

可以看到id(a)==id(b),说明直接赋值时两者指向同一对象

浅拷贝

代码:

import copy

a = [1,2,[3,4]]
b = copy.copy(a)

print(id(a))
print(id(b))
print(id(a[2]))
print(id(b[2]))

b[2][0] = 114
print(a)
print(b)

输出:

2318072588808
2318075078728
2318072853256
2318072853256
[1, 2, [114, 4]]
[1, 2, [114, 4]]

可以看到id(a)!=id(b),但id(a[2])==id(b[2]),说明浅拷贝时a 和 b 是不同对象,但他们的子对象还是指向同一对象。

深拷贝

代码:

import copy

a = [1,2,[3,4]]
b = copy.deepcopy(a)

print(id(a))
print(id(b))
print(id(a[2]))
print(id(b[2]))

b[2][0] = 114
print(a)
print(b)

输出:

2306280302984
2306282689416
2306280303112
2306282795144
[1, 2, [3, 4]]
[1, 2, [114, 4]]

可以看到id(a)!=id(b),且id(a[2])!=id(b[2]),说明深拷贝时a 和 b 是不同对象,他们的子对象也不是同一对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值