关于Python中的深浅copy问题小结

import copy
def test_copy_func():
    x=[1,5,[4,5]]
    print(type(x),'id x=',id(x),type(x[2]),"id[2]=",id(x[2]),"id[0]=",id(x[0]),'id int 1=',id(1))
    y=x                     #是贴了两个标签的效果, y is x=true
    print(type(y),'id y=',id(y),"id[2]=",id(y[2]),"id[0]=",id(y[0]))
    y[0]=2
    y[2][0]=0               
    print("再次输出x",type(x),'id x=',id(x),"id[2]=",id(x[2]),"id[0]=",id(x[0]),"id int 2=",id(2))
    print("y=x,y is x?",y is x)
    w=copy.copy(x)          #新开辟了一个存储空间;只拷贝顶级对象,嵌套对象仍然是标签效果,会改变源数据;w is not x;
    print(type(w),'id w=',id(w),"id[2]=",id(w[2]),"id[0]=",id(w[0]))
    print("w=copy.copy(x),w is x?",w is x)
    w[0]=1
    print("w=copy.copy(x),w[2] is x[2]?",w[2] is x[2])
    w[2][0]+=1
    #deepcopy会对所有嵌套对象开辟新存储空间
    z=copy.deepcopy(x)
    z[2][0]=1
    print(type(z),id(z),"id[2]=",id(z[2]))
    print("z=copy.deepcopy(x),z[2] is x[2]?",z[2] is x[2])
    #以上问题的总结试题
    a = [1,2,3,[4,5],6]
    b=a
    c=copy.copy(a)
    d=copy.deepcopy(a)
    b.append(10)
    c[3].append(11)
    d[3].append(12)
    #a=b=[1, 2, 3, [4, 5, 11], 6, 10]
    #c=[1, 2, 3, [4, 5, 11], 6]
    #d=[1, 2, 3, [4, 5, 12], 6]
    system('pause')

if __name__=='__main__':
    test_copy_func()
    system('pause')

以上代码可以直接在下面的python官方可视化网站运行,清晰地解释了各个对象的关系Python Tutor - Visualize Python, Java, JavaScript, C, C++, Ruby code execution

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值