zoukankan      html  css  js  c++  java
  • 别名、浅复制与深复制

    别名

    别名就是起另一个名字,实际上是同一个东西,地址完全一样,改变任意一个的值,另一个会随着改变。

    person_info = ['age: 18', ['beijing', 'wuhan']]
    info_other_name = person_info  # 别名,他们是在同一个地址上,改变任意一个,另外的跟着改变(可以减少不必要的内存开销)
    print id(info_other_name), id(person_info)  # 地址一样
    person_info[0] = 'age: 23'  # 改变原地址年龄,info_other_name也跟着变,因为就是一个东西
    print u'原来的值', person_info
    print u'别名的值', info_other_name

    输出结果

    47750200 47750200
    原来的值 ['age: 23', ['beijing', 'wuhan']]
    别名的值 ['age: 23', ['beijing', 'wuhan']]

    浅复制

    浅复制表示只复制表面一层,再深的层次还是指向他原来的地址。

    import copy
    person_info = ['age: 18', ['beijing', 'wuhan']]
    info_shallow_copy = copy.copy(person_info)  # 浅复制 只复制第一层,其他层还是指向它原来的地址
    print id(info_shallow_copy), id(person_info)  # 地址不一样
    person_info[0] = 'age: 23'  # 此处改年龄,person并没有跟着改变
    person_info[1].remove('wuhan')  # 删除列表里的下一级列表,会跟着改变
    print u'原来的值', person_info
    print u'浅复制的值', info_shallow_copy

    输出结果

    47791200 47769360  # 地址不一样
    原来的值 ['age: 23', ['beijing']] 
    浅复制的值 ['age: 18', ['beijing']]  # 表面上的一层(年龄),独立于原来的值,但往下一层指向的地址还是原来的指向

    深复制

    深复制之后,所有的内容都独立于原变量存在。

    import copy
    person_info = ['age: 18', ['beijing', 'wuhan']]
    info_deep_copy = copy.deepcopy(person_info)  # 深复制 全部都都复制过来,都不会跟着改变
    print id(info_deep_copy), id(person_info)  # 地址不一样
    person_info[0] = 'age: 23'
    person_info[1].remove('wuhan')
    print u'原来的值',person_info
    print u'深复制的值',info_deep_copy

    输出结果

    54781712 54859536
    原来的值 ['age: 23', ['beijing']]
    深复制的值 ['age: 18', ['beijing', 'wuhan']]  # 完全独立于原来的变量
  • 相关阅读:
    关于属性值
    REG小探
    纯CSS实现立方体旋转
    css3总结(三)立方体、动画、web字体、字体图标、弹性布局、多列布局、伸缩盒子
    css3总结(二)背景色渐变、background、边框图片、过渡、2d变换、3d变换
    css3总结(一)属性选择器、伪类、伪元素、盒模型、边框圆角、文本阴影、边框阴影
    自定义视频播放器(功能包括:播放/暂停,全屏,跳播)
    html5总结
    Git workflow- Git 工作流
    nodejs使用redis实现sub/pub
  • 原文地址:https://www.cnblogs.com/huahua12/p/8531017.html
Copyright © 2011-2022 走看看