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']]  # 完全独立于原来的变量
  • 相关阅读:
    好玩的SQL
    Oracle常用函数
    树控件DeleteAllItems之前先SelectItem(NULL)
    MFC控件位置调整
    C++中一个0xC0000005访问冲突问题
    为MFC按钮添加各种图片
    LVN_ITEMCHANGED(OnItemchanged)通知响应多次的问题
    android 里边的mk文件的解析
    定义属于自己的标题栏
    block 影响代码执行由上往下执行顺序 从而影响功能的解决
  • 原文地址:https://www.cnblogs.com/huahua12/p/8531017.html
Copyright © 2011-2022 走看看