zoukankan      html  css  js  c++  java
  • Python-浅拷贝与深拷贝

    1、浅拷贝

    1 >>> import copy
    2 >>>
    3 >>> num1 = [1, 2, 3, ['a', 'b'], 4, 5]
    4 >>> num2 = copy.copy(num1)
    5 >>> print(id(num1), id(num2))
    6 31514312 51066184    #指向不同内存地址
    7 >>>
    8 >>> print(id(num1[3]), id(num2[3]))
    9 51136456 51136456    #两个列表中的['a', 'b']指向相同内存地址

    可以得出结果

    1 #改变其中一个列表中的外层元素时,另一个列表的外层元素不会发生变化
    2 >>> num1[2] = 'c'
    3 #而无论改变哪个列表的内层元素时,两个列表的内层元素都会发生变化
    4 >>> num2[3][0] = 'd'
    5 >>> print(num1)
    6 [1, 2, 'c', ['d', 'b'], 4, 5]
    7 >>> print(num2)
    8 [1, 2, 3, ['d', 'b'], 4, 5]

    2、深拷贝

    都是指向不同的内存地址

    1 >>> import copy
    2 >>> num1 = [1, 2, 3, ['a', 'b'], 4, 5]
    3 >>> num2 = copy.deepcopy(num1)
    4 >>> print(id(num1), id(num2))
    5 51136520 51136328
    6 >>> print(id(num1[3]), id(num2[3]))
    7 51136776 51066952

    可以得出结论

    1 #无论哪一个列表的内外层元素发生变化都不影响另一个列表
    2 >>> num1[2] = 'c'
    3 >>> num2[3][0] = 'd'
    4 >>> print(num1)
    5 [1, 2, 'c', ['a', 'b'], 4, 5]
    6 >>> print(num2)
    7 [1, 2, 3, ['d', 'b'], 4, 5]
  • 相关阅读:
    Python(条件判断和循环)
    大端还是小端
    c语言程序设计 字符串拷贝拷贝演变与初衷
    内存 匹配串
    多态 C2
    多态 C1
    判断是否存在不合法字符(C++)
    va_start、vsprintf、va_end
    java中instanceof用法
    c++ vector相关
  • 原文地址:https://www.cnblogs.com/drunkle/p/13022021.html
Copyright © 2011-2022 走看看