假设每个变量有两种存储可能 A 存储一个指向其他变量的指针 B 存储一个值(数字,字符之类的具体值)
深拷贝是将内存中A类(指针类)指向最终的值,复制到其他内存区块中
浅拷贝只是复制指针,指向内存区块
import copy
deffun3():print("深拷贝 浅拷贝(默认)")
alist =[1,2,3,["a","b"]]# 浅拷贝
c = copy.copy(alist)# 深拷贝
d = copy.deepcopy(alist)# 普通赋值
e = alist
print(id(alist))print(id(c))print(id(d))print(id(e))print(alist is c)print(alist is d)print(alist is e)print("----- 接下来看神操作")# a = ["3"]# a = "3"
a =3# b = a
b = copy.deepcopy(a)# b= copy.copy(a)print(id(a))print(id(b))print(a is b)'''
所以综上所述,对于数字和字符串的赋值、浅拷贝、深拷贝在内存当中用的都是同一块地址。
对于浅拷贝,字典、列表、元组等类型,它们只拷贝第一层地址
对于深拷贝,它会拷贝多层,
将第二层的列表也拷贝一份,如果还有第三层嵌套,那么第三层的也会拷贝,
但是对于里面的最小元素
比如数字和字符串等基础类型
按照python的机制,它们会共同指向同一个位置,它的内存地址是不会变的。
区别于浅拷贝只拷贝顶层引用,深拷贝会逐层进行拷贝,直到拷贝的所有引用都是不可变引用为止。
id() 函数就是返回对象的内存地址
is 是比较两个变量的对象引用是否指向同一个对象
不要和 == 混了,== 是比较两个变量的值是否相等
'''