zoukankan      html  css  js  c++  java
  • Python开发【第二章】:深浅拷贝剖析

     1 #-----python的赋值,浅copy,深copy-----
     2 #总结:直接赋值即引用,没有拷贝;浅拷贝,浅层拷贝,深层引用;深拷贝,整体拷贝,没有引用。
     3 
     4 #1.直接赋值,传递对象的引用,原始列表改变,被赋值的也会做出相同的改变。
     5 
     6 list_1 = [1,2,3,4,['m','t']]
     7 list_2 = list_1
     8 print(id(list_1),id(list_2))
     9 #输出:35493192 35493192
    10 
    11 list_1.append(5)
    12 print(list_1,id(list_1))
    13 print(list_2,id(list_2))
    14 #输出:
    15 # [1, 2, 3, 4, ['m', 't'], 5] 35362120
    16 # [1, 2, 3, 4, ['m', 't'], 5] 35362120
    17 
    18 #2.浅copy:没有拷贝子对象,所以原始数据改变,子对象会改变
    19 import copy
    20 list_3 = copy.copy(list_1)
    21 print(list_1,id(list_1))
    22 print(list_3,id(list_3))
    23 #输出:
    24 # [1, 2, 3, 4, ['m', 't']] 37524808
    25 # [1, 2, 3, 4, ['m', 't']] 37780424
    26 
    27 list_1[2] = 'zz'
    28 print(list_1,id(list_1))
    29 print(list_3,id(list_3))
    30 #输出:
    31 # [1, 2, 'zz', 4, ['m', 't']] 35558728
    32 # [1, 2, 3, 4, ['m', 't']] 37977032
    33 
    34 list_1[4][0] = 'hh'
    35 print(list_1,id(list_1))
    36 print(list_3,id(list_3))
    37 #输出:
    38 # [1, 2, 3, 4, ['hh', 't']] 31954248
    39 # [1, 2, 3, 4, ['hh', 't']] 32209864
    40 
    41 #3.深copy:对象里面的子对象也拷贝了,所以原始对象的改变不会造成深拷贝里任何元素的改变
    42 import copy
    43 list_4 = copy.deepcopy(list_1)
    44 print(list_1,id(list_1))
    45 print(list_4,id(list_4))
    46 #输出:
    47 # [1, 2, 3, 4, ['m', 't']] 35362120
    48 # [1, 2, 3, 4, ['m', 't']] 37977032
    49 
    50 list_1[2] = 'zz'
    51 print(list_1,id(list_1))
    52 print(list_4,id(list_4))
    53 #输出:
    54 # [1, 2, 'zz', 4, ['m', 't']] 35427656
    55 # [1, 2, 3, 4, ['m', 't']] 35683272
    56 
    57 list_1[4][0] = 'hh'
    58 print(list_1,id(list_1))
    59 print(list_4,id(list_4))
    60 #输出:
    61 # [1, 2, 3, 4, ['hh', 't']] 35624264
    62 # [1, 2, 3, 4, ['m', 't']] 35879880
  • 相关阅读:
    字母运算
    7.5 字典序全排列
    5
    4 c#
    c# 贪吃蛇源码
    【Django】django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required;
    redis 存储验证码 基本使用
    Git 的基本使用
    docker(专业版) 安装过程报错
    router.push query 路由 跳转 传参使用
  • 原文地址:https://www.cnblogs.com/mumupa0824/p/8527925.html
Copyright © 2011-2022 走看看