zoukankan      html  css  js  c++  java
  • 【python】赋值、copy浅拷贝和deepcopy深拷贝

    赋值: 其实就是对象的引用(别名),b = a: 赋值引用,a 和 b 都指向同一个对象。
    浅拷贝(copy.copy): 只拷贝父对象,不会拷贝对象的内部的子对象。 b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
    深拷贝(copy.deepcopy) 深拷贝 拷贝对象及其子对象
    一个很好的例子:b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

    注意事项:这里面说的拷贝是指只要拷贝了就保持两个对象的独立了

    """赋值示例"""
    a = {"a": [1,2,3],"b":"test"}
    b=a
    a["a"][0]=2
    a["b"]="paulwinflo"
    print(a)
    #>>>{'a': [2, 2, 3], 'b': 'paulwinflo'}
    print(b)
    #>>>{'a': [2, 2, 3], 'b': 'paulwinflo'}
    
    """浅拷贝示例"""
    a = {"a": [1,2,3],"b":"test"}
    b=a.copy()
    a["a"][0]=2
    a["b"]="paulwinflo"
    print(a)
    #>>>{'a': [2, 2, 3], 'b': 'paulwinflo'}
    print(b)
    #>>>{'a': [2, 2, 3], 'b': 'test'} #因为浅拷贝是对父对象的拷贝,也就是新的父对象保持独立,不受老的父对象影响
    
    """深拷贝示例"""
    import  copy
    a = {"a": [1,2,3],"b":"test"}
    b=copy.deepcopy(a)
    a["a"][0]=2
    a["b"]="paulwinflo"
    print(a)
    #>>>{'a': [2, 2, 3], 'b': 'paulwinflo'}
    print(b)
    #>>>{'a': [1, 2, 3], 'b': 'test'} #因为深拷贝是对父对象和子对象的拷贝,也就是新的父对象和子对象都会保持独立,不受老的影响
    

      

  • 相关阅读:
    安装elasticsearch 和 kibana
    docker 安装 nignx 并将对应配置文件映射
    linux 操作笔记
    docker 一些常用的命令手记
    c# 异步 多线程
    从零开始在.net中使用Nhibernate对数据库进行操作详细步骤(20121128)
    NHibernate框架的HQL增删改查
    2012年11月19日 利用wifiap简单实现Wifi无线Web认证
    逻辑结构和物理结构
    日志
  • 原文地址:https://www.cnblogs.com/paulwinflo/p/4936516.html
Copyright © 2011-2022 走看看