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

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

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

    浅拷贝

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

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

    代码演示

    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方法实现。深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都没有相同的了。

    代码演示

    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学习网