深浅拷贝总结
- copy , deepcopy 拷贝不可以变类型的数据, 只是引用了该数据的内存地址, 没有创建新的内存地址
不可变类型: int , str, bool, tuple
可变类型: list, dict, set - copy, deepcopy: 如果拷贝可变类型数据: 如果元素都是不可变类型, 深浅拷贝, 都会生成一个新的地址, 里面元素的内存地址不变
- copy, deepcopy: 如果拷贝不可变类型数据: 深浅拷贝, 首先 都会生成一个新的地址, 如果里面的元素是不可变数据, 深拷贝不会生成新的元素内存地址, 如果元素是可变类型的, 深拷贝, 会生成一个新的内存地址,
浅拷贝不会对于可变元素, 生成与新的内存地址
深浅拷贝, 操作不可变类型
a = 'hello word'
b = copy.copy(a)
c = copy.deepcopy(a)
print(id(a), id(b), id(c))
_tuple = (1, 2, 3)
a_tuple = copy.copy(_tuple)
b_tuple = copy.deepcopy(_tuple)
print(id(_tuple), id(a_tuple), id(b_tuple))
深浅拷贝, 操作可变类型数据
_list = [1, 2, 3, 4]
a_list = copy.copy(_list)
b_list = copy.copy(_list)
print(id(_list), id(a_list), id(b_list))
print(id(_list[0]), id(a_list[0]), id(b_list[0]))
深浅拷贝操作: 不可变数据类型中, 含有可变数据类型的数据
_tup = (1, 2, 3, [4, 5, 6])
a_tup = copy.copy(_tup)
b_tup = copy.deepcopy(_tup)
print(id(_tup), id(a_tup), id(b_tup))
print(id(_tup[0]), id(a_tup[0]), id(b_tup[0]))
print(id(_tup[3]), id(a_tup[3]), id(b_tup[3]))
print(id(_tup[3][0]), id(a_tup[3][0]), id(b_tup[3][0]))
深浅拷贝操作: 可变数据类型中包含, 可变数据
_lt = [1, 2, 3, [4, 5, 6]]
a_lt = copy.copy(_lt)
b_lt = copy.deepcopy(_lt)
print(id(_lt), id(a_lt), id(b_lt))
print(id(_lt[0]), id(a_lt[0]), id(b_lt[0]))
print(id(_lt[3]), id(a_lt[3]), id(b_lt[3]))