一:深浅拷贝的概念
1、对象是由内存地址、数据类型、值组成。
2、深拷贝是指:拷贝原对象“值”的同时并生成新的内存地址。
3、浅拷贝是指:拷贝原对象“值”,不生成新的内存地址,内存地址依旧指向原对象的值。
二:可变对象与不可变对象
1、可变对象包括:list(列表)、dict(字典)、set(集合)
2、不可变对象包括:str(字符串)、int(整数)、float(浮点数)、tuple(元组)、bool(布尔)、frozenset(不可变集合)
三:深浅拷贝对可变对象和不可变对象的处理逻辑
注:表格中的“拷贝”指生成新的内存地址,也就是生成新的对象
深拷贝 | 浅拷贝 | |
可变嵌套可变[[],[]] | 内外层拷贝 | 外层拷贝,内层引用 |
可变嵌套不可变[(),()] | 外层拷贝,内层引用 | 外层拷贝,内层引用 |
不可变嵌套可变([],[]) | 内外层拷贝 | 内外层引用 |
不可变嵌套不可变((),()) | 内外层引用 | 内外层引用 |
四:demo演示
#可变嵌套可变 import copy a = [[1]] b = copy.deepcopy(a) #deepcopy为深拷贝,浅拷贝就是copy.copy() print(id(a),id(a[0])) #2289929874824 2289929618440 print(id(b),id(b[0])) #2289929790728 2289929872136