python中的赋值、浅拷贝和深拷贝区别

本文详细解释了Python中对象的直接赋值、浅拷贝和深拷贝的区别,并通过实例展示了不同拷贝方式下对象的变化情况及内存地址的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.直接赋值:在内存中的地址是一个,是对象的引用,

2.浅拷贝:藕断丝连,拷贝父对象,但不会拷贝对象内部的子对象,子对象还是引用

3.深拷贝:毫无关系,互不影响,完全拷贝父对象及其子对象,内容虽一样,但内存中的地址不是一个;

直接赋值实例:

>>> a=[1,2,3,4,["a","b"]]

>>> b=a

>>> id(a)

2307481148552   

>>> id(b)

2307481148552        #地址是一个,a和b都指向同一个对象

 

>>> a

[1, 2, 3, 4, ['a', 'b', 'c'], 6]

>>> b

[1, 2, 3, 4, ['a', 'b', 'c'], 6]    

浅拷贝实例:

>>> import copy

>>> a=[1,2,3,4,["a","b"]]

>>> c=copy.copy(a)

>>> c

[1, 2, 3, 4, ['a', 'b']]

>>> a.append(6)

>>> a[4].append("c")

 

>>> a

[1, 2, 3, 4, ['a', 'b', 'c'], 6]

>>> c

[1, 2, 3, 4, ['a', 'b', 'c']]

 

>>> id(a)

2307481148552

>>> id(c)

2307481256328    #地址不是一个,a和c都是一个独立的对象

 

>>> id(a[4])

2307481148360   

>>> id(c[4])

2307481148360    #子对象的地址还是一个,所以子对象还是指向统一对象(是引用)

深拷贝实例:

>>> a=[1,2,3,4,["a","b"]]

>>> import copy

>>> d=copy.deepcopy(a)

 

>>> id(a)

2307481148552

>>> id(d)

2307481256392   #地址不一样

 

>>> id(a[4])

2307481148360

>>> id(d[4])

2307481256264   #子对象地址也不一样,所以两者完全独立

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值