zoukankan      html  css  js  c++  java
  • python中的copy与deepcopy

    引子:首先我们有一个赋值运算作为引子,如下

    1 l1 = [1, 2, 3, ['java', 'python']]
    2 l2 = l1
    3 l1[0] = 111
    4 print(l1)    #输出结果:[111, 2, 3, ['java', 'python']]
    5 print(l2)    #输出结果:[111, 2, 3, ['java', 'python']]
    6 #由上面的例子我们不难明白,python中对于赋值运算来说,l1与l2指向的是同一个地址,所以他们是完全一样的。

    1.浅拷贝copy()

     1 l1 = [1, 2, 3, ['java', 'python']]
     2 l2 = l1.copy()
     3 print(l1,id(l1))      #输出结果:[1, 2, 3, ['java', 'python']] 46594648
     4 print(l2,id(l2))      #输出结果:[1, 2, 3, ['java', 'python']] 46861728
     5 
     6 l1[2] = 222
     7 print(l1,id(l1))      #输出结果:[1, 2, 222, ['java', 'python']] 46594648
     8 print(l2,id(l2))      #输出结果:[1, 2, 3, ['java', 'python']] 46861728
     9 
    10 l1[1] = 333
    11 print(l1,id(l1))      #输出结果:[1, 333, 222, ['java', 'python']] 86112856
    12 print(l2,id(l2))      #输出结果:[1, 2, 3, ['java', 'python']] 86707576
    13 
    14 l1[3][0] = 'c++'
    15 print(l1,id(l1))      #输出结果:[1, 333, 222, ['c++', 'python']] 88013360
    16 print(l2,id(l2))      #输出结果:[1, 2, 3, ['c++', 'python']] 88608080
    17 #对于浅拷贝来说,第一层创建的是新的地址,然而第二层就不一样的,输入的改变也会影响到拷贝项的改变

    2.深拷贝deepcopy

     1 import copy
     2 l1 = [1, 2, 3, ['java', 'python']]
     3 l2 = copy.deepcopy(l1)
     4 
     5 print(l1,id(l1))      #输出结果:[1, 2, 3, ['java', 'python']] 57042104
     6 print(l2,id(l2))      #输出结果:[1, 2, 3, ['java', 'python']] 57043024
     7 
     8 l1[2] = 222
     9 print(l1,id(l1))      #输出结果:[1, 2, 222, ['java', 'python']] 57042104
    10 print(l2,id(l2))      #输出结果:[1, 2, 3, ['java', 'python']] 57043024
    11 
    12 l1[1] = 333
    13 print(l1,id(l1))      #输出结果:[1, 333, 222, ['java', 'python']] 57042104
    14 print(l2,id(l2))      #输出结果:[1, 2, 3, ['java', 'python']] 57043024
    15 
    16 l1[3][0] = 'c++'
    17 print(l1,id(l1))      #输出结果:[1, 333, 222, ['c++', 'python']] 57042104
    18 print(l2,id(l2))      #输出结果:[1, 2, 3, ['java', 'python']] 57043024
    19 #对于深拷贝deepcopy来说,无论创建多少个,这些每个之间都是独立的,改变任意一个元素,
    20 #都不会影响到其他的,无论多少层都是一样的
  • 相关阅读:
    linux下编译GDAL3.x(集成Proj和Geos等)
    CSS后代选择器、子元素选择器、相邻兄弟选择器区别与详解
    CSS hover伪类改变其他元素的样式
    PHP 删除数组指定元素
    CakePHP 调试方法 汇总
    Linux/Mac OS 在终端使用 code 命令打开项目 VSCode
    苹果 MacOS 安装 Source Code Pro
    MacOS 安装 Homebrew 错误处理 Connection refused
    修改 VSCode 终端 Terminal 的字体
    spring cloud gateway自定义过滤器
  • 原文地址:https://www.cnblogs.com/rcat/p/9296769.html
Copyright © 2011-2022 走看看