栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

深复制和浅复制分别python_python深copy 浅copy?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深复制和浅复制分别python_python深copy 浅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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786878.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号