值的引用
# 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键