python深拷贝和浅拷贝的使用场景_python深拷贝和浅拷贝

is 比较两个引用是否指向同一个对象

== 比较两个对象是否相等

>>> a = [1,2]

>>> b = [1,2]

>>> c = a

>>> id(a)

140275902517640

>>> id(b)

140275902517960

>>> id(c)

140275902517640

>>> a == b # a、b分别指向的对象值相等

True

>>> a is b # a、b分别指向不同的对象

False

>>> a is c # a、c指向同一个对象

True

深拷贝:复制了引用和内容

浅拷贝: 仅复制了引用,未复制对象

# 浅拷贝 a、b指向同一个对象地址

>>> a = [1,2]

>>> b = a

>>> id(a)

140275902517704

>>> id(b)

140275902517704

>>> a.append(3) # 浅拷贝,修改a的值,b的值随之变化 【图1】

>>> b

[1,2,3]

# 深拷贝

>>> import copy

>>> c = copy.deepcopy(a)

>>> id(a)

140275902517704

>>> id(c)

140275902301264

>>> a.append(3) # 深拷贝,修改a的值,c的值不变 【图2】

>>> c

[1,2]

>>> a = [1,2] # 【图3】

>>> b = [3,4]

>>> c = [a,b]

>>> d = copy.deepcopy(c)

>>> d

[[1,2],[3,4]]

>>> a.append(3)

>>> c

[[1,3],4]] # 浅拷贝

>>> d

[[1,4]] # 深拷贝

>>> a = [1,2] # 【图4】

>>> b = [3,b]

>>> d = copy.copy(c)

>>> d

[[1,4]]

>>> a[0] = 0

>>> d

[[0,4]]

# copy当拷贝一个不可变类型数据时,只会进行浅拷贝

a = [1,2]

b = [3,4]

c = (a,b)

d = copy.copy(c)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值