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']]  # 完全独立于原来的变量
  • 相关阅读:
    java中有趣的unicode转义序列
    react父组件传入子组件的props不更新问题
    create-react-app修改端口号
    转移博客启动中。。。
    idea java界面设置中文
    记录一次 electronjs 12.0.0 安装运行出现cli.js出错、以及获取不到nodeapi的问题(解决办法:版本不对导致的)
    springboot 统一json返回格式,并设置http响应码
    springboot 统一json返回结构
    【Python】【PyPI】twine模块打包python项目上传pypi
    【GitHub】README.md自述文件配置
  • 原文地址:https://www.cnblogs.com/huahua12/p/8531017.html
Copyright © 2011-2022 走看看