python 深浅拷贝

深浅拷贝
(1)赋值运算

l1 = [1,2,3,['barry','alex']]
l2 = l1

l1[0] = 111
print(l1) # [111, 2, 3, ['barry', 'alex']]
print(l2) # [111, 2, 3, ['barry', 'alex']]

l1[3][0] = 'wusir'
print(l1) # [111, 2, 3, ['wusir', 'alex']]
print(l2) # [111, 2, 3, ['wusir', 'alex']]

 

(2)浅拷贝

lst1 = ["太白","日天","哪吒","银角大王","金角大王"]
lst2 = lst1
lst1.append("女神")
print(lst1,id(lst1))
print(lst2,id(lst2))
#指向同一个内存地址,所以二者相同
lst1 = ["太白","日天","哪吒","银角大王","金角大王"]
lst2 = lst1.copy() # 会创建新对象, 创建对象的速度会很快. lst2 = lst1[:] 创建了新列表
lst1.append("女神")
print(lst1,id(lst1)) #['太白', '日天', '哪吒', '银角大王', '金角大王', '女神'] 2606709613704
print(lst2,id(lst2)) #['太白', '日天', '哪吒', '银角大王', '金角大王'] 2606709613832 
lst1 = ["太白","日天",["盖浇饭", "锅包肉", "吱吱冒油的猪蹄子"],"哪吒","银角大王","金角大王"]
lst2 = lst1.copy() # 会创建新对象, 创建对象的速度会很快.
lst1[2].append("油泼扯面")
print(lst1,id(lst1[2])) #['太白', '日天', ['盖浇饭', '锅包肉', '吱吱冒油的猪蹄子', '油泼扯面'], '哪吒', '银角大王', '金角大王'] 1440371189000
print(lst2, id(lst2[2])) #['太白', '日天', ['盖浇饭', '锅包肉', '吱吱冒油的猪蹄子', '油泼扯面'], '哪吒', '银角大王', '金角大王'] 1440371189000

 


(3)深拷贝

# 导入拷贝模块
import copy
lst1 = ["太白","日天",["盖浇饭", "锅包肉", "吱吱冒油的猪蹄子"],"哪吒","银角大王","金角大王"]
lst2 = copy.deepcopy(lst1)
print(lst1,id(lst1[2])) #['太白', '日天', ['盖浇饭', '锅包肉', '吱吱冒油的猪蹄子'], '哪吒', '银角大王', '金角大王'] 1764073894856
print(lst2,id(lst2[2])) #['太白', '日天', ['盖浇饭', '锅包肉', '吱吱冒油的猪蹄子'], '哪吒', '银角大王', '金角大王'] 1764073896264

小结:

赋值没有创建新对象。多个变量共享同一个对象
浅拷贝:会创建新对象。 新的对象中里面的内容不会被拷贝
深拷贝。 创建一个一模一样的完全新的对象。 这个对象延伸出来的内容也会跟着复制一份

转载于:https://www.cnblogs.com/avit/p/10209338.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值