Python中的赋值、浅拷贝、深拷贝之间的区别

本文通过实例演示了Python中对象赋值、浅拷贝及深拷贝的区别。展示了不同拷贝方式下对象间的关系及其如何受彼此变化的影响。深入理解这些概念有助于避免在实际编程中出现意外的副作用。

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

1.赋值: 只是复制了新对象的引用,不会开辟新的内存空间。
2.
浅拷贝: 创建新对象,其内容是原对象的引用,view
3.
深拷贝:只有一种形式,copy模块中的deepcopy函数。
     
和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。
     
深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。

import numpy as np
a=np.array([
12,10,11,13,21,10,1005,1,2,3,19])
print("a结果:",a)

a结果: [ 12   10   11  13   21   10 1005   1    2    3  19]
b=a
print("b结果:",b)

b结果: [ 12   10   11  13   21   10 1005   1    2    3  19]

#赋值

a[1]=999
print("a,b结果:")
print("a",a)

a [ 12  999   11  13   21   10 1005   1    2    3  19]

print("b",b)

b [ 12  999   11  13   21   10 1005   1    2    3  19]

#浅拷贝,内容互相影响

c=a.view()
print(id(a),id(c))
a[
1]=1000
c[1]=1999
print("a,b结果:")
print(a)
print(c)
print(id(a),id(c))

结果如下:

395076666992395079245536

a,b结果:

[  12 1999  11   13   21  10 1005    1    2   3   19]

[  12 1999  11   13   21  10 1005    1    2   3   19]

#深拷贝
d=a.copy()
print(a,d)
a[
1]=2999
d[1]=3999
print("a,b深拷贝结果:")
print(a)
print(d)

a,b深拷贝结果:

[  12 2999   11  13   21   10 1005   1    2    3  19]

[  12 3999   11  13   21   10 1005   1    2    3   19]

#结果完全独立,互不影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值