python深浅拷贝

深浅拷贝总结

  1. copy , deepcopy 拷贝不可以变类型的数据, 只是引用了该数据的内存地址, 没有创建新的内存地址
    不可变类型: int , str, bool, tuple
    可变类型: list, dict, set
  2. copy, deepcopy: 如果拷贝可变类型数据: 如果元素都是不可变类型, 深浅拷贝, 都会生成一个新的地址, 里面元素的内存地址不变
  3. copy, deepcopy: 如果拷贝不可变类型数据: 深浅拷贝, 首先 都会生成一个新的地址, 如果里面的元素是不可变数据, 深拷贝不会生成新的元素内存地址, 如果元素是可变类型的, 深拷贝, 会生成一个新的内存地址,
    浅拷贝不会对于可变元素, 生成与新的内存地址

深浅拷贝, 操作不可变类型

a = 'hello word'
b = copy.copy(a)
c = copy.deepcopy(a)
# 得出结果: 内存地址不会发生改变: 2329350775984 2329350775984 2329350775984
print(id(a), id(b), id(c))
_tuple = (1, 2, 3)
a_tuple = copy.copy(_tuple)
b_tuple = copy.deepcopy(_tuple)
# 内存地址不会发生改变: 1487963860208 1487963860208 1487963860208
print(id(_tuple), id(a_tuple), id(b_tuple))

深浅拷贝, 操作可变类型数据

_list = [1, 2, 3, 4]
a_list = copy.copy(_list)
b_list = copy.copy(_list)
# 操作可变类型的数据, 深浅拷贝, 都会生成一个新的内存地址, 但里面不可以变数据类型的内存地址不会发生改变
# 结果 1453464809672 1453464809928 1453464811080
print(id(_list), id(a_list), id(b_list))
# 结果 1453464809672 1453464809928 1453464811080
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)
# 1515611964584 1515611964584 1515611964664
print(id(_tup), id(a_tup), id(b_tup))
# 1895590944 1895590944 1895590944
print(id(_tup[0]), id(a_tup[0]), id(b_tup[0]))
# 1515612337672 1515612337672 1515612337544
print(id(_tup[3]), id(a_tup[3]), id(b_tup[3]))
# 1895591040 1895591040 1895591040
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)
# 2564989646280 2564989646088 2564989646024
print(id(_lt), id(a_lt), id(b_lt))
# 1895590944 1895590944 1895590944
print(id(_lt[0]), id(a_lt[0]), id(b_lt[0]))
# 1895590944 1895590944 1895590944
print(id(_lt[3]), id(a_lt[3]), id(b_lt[3]))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值