美文网首页
copy 和 deepcopy

copy 和 deepcopy

作者: 丫丫姑娘_b55e | 来源:发表于2018-10-18 19:58 被阅读0次

    浅拷贝copy

    1.id()查看内存编号
    执行
    a = 5
    id(a) -10965024
    b = a
    id(b) - 10965024
    结果:a和b中的内存编号是一样的
    变量a和b其实都是对像的标签
    ad = {"name":"Jack","lang":"python"}
    bd = ad
    、>>> id(ad)
    139853935195120
    、>>> id(bd)
    139853935195120

    使用copy

    、>>> cd= ad.copy()
    、>>> cd
    {'name': 'Jack', 'lang': 'python'}
    、>>> id(cd)
    139853935195192
    、>>> cd
    {'name': 'Jack', 'lang': 'python'}
    这个时候如果修改cd不会对ad造成任何影响

    但是当key所对应的值是一个列表时

    />>> x = {'name':'xiaoming','hoby':['basketball','football']}
    、>>> x
    {'name': 'xiaoming', 'hoby': ['basketball', 'football']}
    、>>> y = x.copy()
    、>>> y
    {'name': 'xiaoming', 'hoby': ['basketball', 'football']}
    、>>> id(x)
    139853934436000
    、>>> id(y)
    139853904439624
    修改hoby时,x和y都发生了改变
    、>>> y['hoby'].remove('football')
    />>> y
    {'name': 'xiaoming', 'hoby': ['basketball']}
    />>> x
    {'name': 'xiaoming', 'hoby': ['basketball']}
    虽然x和y对应着两个不同的对象,但是其中一个键的值是列表,列表是同一个对象
    所以把用copy实现的拷贝称为浅拷贝

    深拷贝deepcopy

    import copy
    />>> z
    {'name': 'xiaoming', 'hoby': ['basketball', 'football']}
    />>> y = copy.deepcopy(z)
    />>> y
    {'name': 'xiaoming', 'hoby': ['basketball', 'football']}
    />>> y['hoby'].remove('basketball')
    />>> y
    {'name': 'xiaoming', 'hoby': ['basketball']}
    />>> z
    {'name': 'xiaoming', 'hoby': ['basketball', 'football']}
    这个时候修改y并不会对x造成影响

    相关文章

      网友评论

          本文标题:copy 和 deepcopy

          本文链接:https://www.haomeiwen.com/subject/xcwszftx.html