• 技术文章 >Python技术 >Python基础教程

    python深拷贝和浅拷贝的区别是什么

    爱喝马黛茶的安东尼爱喝马黛茶的安东尼2019-12-20 14:52:37原创28049

    浅拷贝

    copy模块里面的copy方法实现。浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象;改变原始对象中为不可变类型的元素的值,不会响拷贝对象。

    python学习网,大量的免费python视频教程,欢迎在线学习!

    代码演示

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    import copy

    #定义一个列表,其中第一个元素是可变类型。

    list1 = [[1,2], 'fei', 66];

    #进行浅copy

    list2 = copy.copy(list1);

    #对象地址是否相同。

    print(id(list1));

    print(id(list2));

    #结果:不同

    46177816

    46177936

    #第一个元素地址是否相同。

    print(id(list1[0]));

    print(id(list2[0]));

    #结果:相同

    46240432

    46240432

    #第二个元素地址是否相同。

    print(id(list1[1]));

    print(id(list2[1]));

    #结果:相同

    45547328

    45547328

    #改变第一个值,查看复制对象变化。

    list1[0][0] = 2;

    print(list2);

    #结果:复制对象发生变化

    [[2, 2], 'fei', 66]

    #改变第二个值,查看复制对象变化。

    list1[1] = 'ge';

    print(list2);

    #结果:复制对象没发生变了

    [[2, 2], 'fei', 66]

    相关推荐:《Python教程

    深拷贝

    copy模块里面的deepcopy方法实现。深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都没有相同的了。

    代码演示

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    import copy

    #定义一个列表,其中第一个元素是可变类型。

    list1 = [[1,2], 'fei', 66];

    #进行深copy

    list2 = copy.copy(list1);

    #对象地址是否相同。

    print(id(list1));

    print(id(list2));

    #结果:不同

    46177816

    46177936

    #第一个元素地址是否相同。

    print(id(list1[0]));

    print(id(list2[0]));

    #结果:不同

    49123856

    49588784

    #第二个元素地址是否相同。

    print(id(list1[1]));

    print(id(list2[1]));

    #结果:相同

    45547328

    45547328

    #改变第一个值,查看复制对象变化。

    list1[0][0] = 2;

    print(list2);

    #结果:复制对象没发生变了

    [[1, 2], 'fei', 66]

    #改变第二个值,查看复制对象变化。

    list1[1] = 'ge';

    print(list2);

    #结果:复制对象没发生变了

    [[1, 2], 'fei', 66]

    专题推荐:python 深拷贝 浅拷贝 区别
    上一篇:python怎么判断大小写 下一篇:python如何调用另一个文件中的函数

    相关文章推荐

    • Python深浅拷贝是什么

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网