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'} #因为深拷贝是对父对象和子对象的拷贝,也就是新的父对象和子对象都会保持独立,不受老的影响
    

      

  • 相关阅读:
    P1509 找啊找啊找GF
    P1508 Likecloud-吃、吃、吃
    P1493 分梨子
    P1507 NASA的食物计划
    Java简单从文件读取和输出
    服务器和普通用户电脑的区别
    readUTF()和writeUTF()
    js中substring和substr的用法
    AfxMessageBox和MessageBox差别
    POJ 3691 & HDU 2457 DNA repair (AC自己主动机,DP)
  • 原文地址:https://www.cnblogs.com/paulwinflo/p/4936516.html
Copyright © 2011-2022 走看看