- 引用:内存地址
- Python中所有赋值都是引用
- 浅拷贝:复制第一层(地址改变) 其他都是引用
- 深拷贝:全部复制,重新开辟一块空间
- 补充:切片是浅拷贝
- 可变类型:改变值,地址不会改变
- 不可变类型:改变值,地址改变
实例:
a = 1
a = 2
以上两者内存地址不一样,因为数字不可变类型
a = [1, 2, 3]
b = a b是赋值
此时a 和 b 内存地址一样
b = [1, 2, 3]
此时a = [1, 2,3, 4]
b = [1, 2, 3, 4]
此时a和b数值一样,内存地址一样,因为a是可变类型
import copy
a = [1, 2, 3]
b = [11, 22, 33]
c = [a, b]
c = [[1, 2,3],[11, 22, 33]]
d = copy.copy(c)
此时d浅拷贝c第一层,也就是d 重新拷贝了一块地址
其内列表a和列表b只是引用
e =copy.deepcopy(c)
此时e深拷贝c全部,此时e和c地址一样
其内列表[1, 2,3]和列表[11, 22, 33]也拷贝了一份,
也就是两者地址已改变
此时 a = [1,2, 3, 4]
c = [[1, 2, 3,4],[11, 22, 33]]
d = [[1, 2, 3,4],[11, 22, 33]]
e = [[1, 2,3],[11, 22, 33]]