zoukankan      html  css  js  c++  java
  • Python基础之深拷贝与浅拷贝

    赋值

    在Python中,  赋值实际上传递的是对象的引用, 即将一个变量赋值给另一个变量, 就是将这个变量所指向的值的引用传递给新的变量,

    这样, 如果修改了旧的变量, 新的变量也会发生变化

    old_var = [111, 222, 333]
    new_var = old_var
    
    print(old_var)
    print(new_var)
    
    print(id(old_var))
    print(id(new_var))

    浅拷贝

    浅拷贝拷贝的是对象的第一层元素的地址, 所以在Python中, 浅拷贝分为两种情况

    当对象中所包含的元素都为不可变类型的时候, 那么原始数据改变, 新数据不会改变

    list1 = ['aaa', 'bbb', 'ccc']
    list2 = list1.copy()
    
    print(id(list1))
    print(id(list2))
    
    print(list1)
    print(list2)
    
    list1[2] = 'ddd'
    
    print(list1)
    print(list2)

    当对象所包含的元素有可变类型的时候, 如果该元素的数据改变, 那么新数据也会改变

    list1 = ['aaa','bbb',[1, 2]]
    
    list2 = list1.copy()
    print(list1)
    print(list2)
    print(id(list1), id(list2))
    
    list1[2][0] = 111
    list1[2][1] = 222
    
    print(list1)
    print(list2)

      

    深拷贝

    完全拷贝父对象及其子对象,所以原始对象的改变不会造成深拷贝里任何子元素的改变

    import copy
    
    list1 = [ 'aaa','bbb',[1, 2]]
    
    list2 = copy.deepcopy(list1)
    print(id(list1), id(list2))
    
    list1[2][0] = 111
    list1[2][1] = 222
    
    print(list1)
    print(list2)
  • 相关阅读:
    React 生命周期
    css 多行文本以...代替
    微信JSSDK配置文件说明
    zepto阻止事件冒泡
    PHP 图片处理PNG颜色丢失
    React 学习笔记(一)
    webpack webpack-dev-server使用指南
    为什么需要使用模块打包工具?
    如何实现微信公户绑定公众号业务
    iOS 手势
  • 原文地址:https://www.cnblogs.com/featherwit/p/12902696.html
Copyright © 2011-2022 走看看