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)
  • 相关阅读:
    08:特殊日历计算
    07:玛雅历
    Vigenère密码
    openjudge 螺旋加密
    C#遍历指定文件夹中的所有文件和子文件夹
    确定两串乱序同构
    方阵原地顺时针旋转90度
    05:统计单词数【NOIP2011复赛普及组第二题】
    牛客网一道趣味题
    二分查找的平均查找长度详解【转】
  • 原文地址:https://www.cnblogs.com/featherwit/p/12902696.html
Copyright © 2011-2022 走看看