python浅拷贝与深拷贝

       最近看了一些Python的教学视频,其中看到一个关于Python拷贝(浅拷贝与深拷贝)的知识点,老师说这是重点,所以在这里分享一下我对浅拷贝与深拷贝的理解。

       Python的拷贝方式分为两种,一种是浅拷贝,另一种是深拷贝,所谓浅拷贝,通俗点说就是把一个变量的值赋给另一个变量,Python对变量赋值的处理方式和C、C++不同,对于某个赋值语句如a=100,C、C++是开辟一块空间,这个空间的名字是a,然后把100放入a所在的空间,如果变量的值改变,那么a的地址不变,变化的只是a所在地址里的值,而Python是开辟一块空间,名字是整数100,然后变量a指向100,如果a的值改变,比如改成a=200,那么100的地址不变,另外开辟一块名字为200的空间,让a指向他,本人语文不好,说的可能有点迷,大家看下面的代码会直观一点:

python:

a = 100
print(id(a))
a = 200
print(id(a))

执行结果为:

1574664352

1574667552

C++:

int a;
a = 100;
cout<<&a<<endl;
a = 200;
cout<<&a<<endl;

执行结果为:

0x6dfefc
0x6dfefc

因为Python有这样的特点,造成Python的拷贝方式被分为浅拷贝和深拷贝。

浅拷贝,简单点就是变量之间相互赋值,如下:

a = [11,22,33]
b = a
print(id(a))
print(id(b))

执行结果为:

1574664352

1574664352

可以看到,两个变量共用一块内存地址,图示如下:

浅拷贝还可以通过copy库中的copy函数来进行,代码如下:

import copy
a = 100
c = copy.copy(a)
print(id(a))
print(id(c))

 执行结果为:

1574664352

1574664352

所谓深拷贝,就是另外开辟一块空间,将被拷贝变量的值放进去,然后让新变量指向新开辟的内存空间,深拷贝用copy库中的deepcopy函数实现,代码如下:

import copy

a = [11,22,33]
b = copy.deepcopy(a)
print(id(a))
print(b)
print(id(b))

执行结果为:

2400936241032

[11, 22, 33]

2400936240968

可以发现地址已经被改变。

图示如下:

这里要说一个注意的问题,深拷贝的作用对象只能是Python当中的可变数据类型,如列表和字典,对于不可变数据类型如元组tuple和数值型来说是没有用的,我举个例子大家就明白了:

import copy

a = 100
b = (11,22,33)
c = copy.deepcopy(a)
d = copy.deepcopy(b)

print(id(a))
print(id(c))
print(id(b))
print(id(d))

执行结果为:

1574664352

1574664352

2400936875928

2400936875928

可以发现地址并没有被改变。

以上只是对深拷贝和浅拷贝的一个很浅的理解,大佬勿喷。

如果有写的不对的地方还请各位大佬批评指正。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值