赋值,深拷贝和浅拷贝

值的引用

# 1.值的引用
nums1 = [1, 2, 3 ]
nums2 = nums1      # nums2指向nums1的内存空间
nums1.append(4)
print(nums2)    # 1 2 3 4

在这里插入图片描述
nums1的 更改会影响nums2 的数值

深拷贝和浅拷贝

浅拷贝

# 2.拷贝:浅拷贝和深拷贝
# 2-1)浅拷贝
n1 = [1, 2, 3]
n2 = n1.copy()     #n1.copy 和n1[:]都可以实现
# n2指向n1,copy存在的地址空间
n1.append(4)
print(n2)

在这里插入图片描述

深拷贝

# 2-1)深拷贝
"""
    可变数据类型(可增删改查):列表 
    不可变数据类型:数值型 str tuple nametuple
"""
n1 = [1, 2, [1, 2]]
n2 = n1.copy()
# n1和n2的地址
print(id(n1), id(n2))   #n1 和 n2地址中存储的每个元素的地址
print(id(n1[-1]),id(n2[-1]))
n1[-1].append(4)
print(n2)
# 如果有列表嵌套的是否,或者列表中存在可变数据类型,拷贝时一定选择深拷贝

在这里插入图片描述
虽然n1和n2的地址不同,但是他们最后一个元素指向 的物理位置相同。
这里我们可以观察一下,浅拷贝。
在这里插入图片描述

为什么需要深拷贝?

如果列表拷贝时,列表的包含可变数据类型,一定要深拷贝

# 2-3)如何实现深拷贝?copy.depcopy
import copy
n1 = [1, 2, [1, 2]]
n2 = copy.deepcopy(n1)
# n1和n2的地址
print(id(n1), id(n2))
print(id(n1[-1]),id(n2[-1]))
n1[-1].append(4)
print(n2)

在这里插入图片描述
结论:赋值会影响
浅拷贝:只是拷贝地址
深拷贝:会拷贝地址对应的数值

快捷键的补充

快速注释代码的快捷键:ctrl + /
批量缩进的快捷键:选中所进的内容, tab键
批量取消注释的快捷键: 选中取消缩进的内容,shift+tab键

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿相思白了头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值