python复制地址不同有问题_Python - 深浅复制的区别

Python中的数据类型是否可变分类依据是你修改这个变量的时候修改的是内存指针还是内存地址里的值。

不可变数据类型修改变量的值时,实际上只是修改了这个变量的指针。而可变数据类型的变量则是内存地址不变,修改了该地址的值。

在可变数据类型的使用与复制时要额外注意这点。

>>> numbs1 = [100, 200, 300]

>>> numbs2 = numbs1

>>> numbs1[0] = 1

>>> print(numbs2)

[1, 200, 300]

>>> id(numbs1)

140071119138240

>>> id(numbs2)

140071119138240

深浅复制的区别主要应用于可变数据类型里的列表、字典、集合。

浅复制在复制的时候新的对象指向的内存地址与原对象不同,但是对象内的元素指向的内存地址是相同的。

>>> numbs1 = [100, 200, 300]

>>> numbs2 = numbs1

>>> numbs1[0] = 1

>>> print("%X %X" %(id(numbs2),id(numbs2)))

7F465477ED00 7F465477ED00

>>> numbs3 = numbs1.copy

>>> print("列表的内存地址%X %X %X" %(id(numbs1),id(numbs2),id(numbs3)))

列表的内存地址7FAB8520E180 7FAB8520E180 7FAB8520E380

>>> print("列表中第一个元素的内存地址%X %X %X" %(id(numbs1[0]),id(numbs2[0]),id(numbs3[0])))

列表中第一个元素的内存地址558984E25D40 558984E25D40 558984E25D40

而深复制则会将对象内的元素也完全复制到其他地址上。是一种完全拷贝。# import copy ; z = copy.deepcopy(x)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值