zoukankan      html  css  js  c++  java
  • qing理解赋值,深浅拷贝的区别

    首先放一个程序:

    #encoding=utf-8
    import copy
    a = [1, 2, 3, 4, 5, ['a', 'b']]# 原始对象
    b = a # 赋值,传对象的引用
    c = copy.copy(a) # 对象拷贝,浅拷贝
    d = copy.deepcopy(a) # 对象拷贝,深拷贝

    a.append(6) # 修改对象a
    a[5].append('c') # 修改对象a中的['a', 'b']数组对象
    print 'a = ', a
    print 'b = ', b
    print 'c = ', c
    print 'd = ', d

    赋值:

    python中的对象之间赋值时是引用传递的,内存指向同一个地址id

    b=a ,所以a怎么变,b也会相应变化

    浅拷贝:

    copy.copy:只拷贝父对象,不会拷贝对象的内部的子对象

    俗话就是:c = copy.copy(a), 浅拷贝后,只有a中的list元素有变化,c才会变化;

                     如果改变c中的list元素,a也会变化

    原因:浅拷贝的内存

     

    对于列表元素(可变对象)来说,浅拷贝指向的内存地址是一样的,导致无论改变a还是c,都会影响对方;

    对于不可变对象来说,没有影响;

    深拷贝:

    copy.deepcopy 深拷贝 拷贝对象及其子对象

    俗话就是:d = copy.deepcopy(a),深拷贝拷贝过来以后,跟原来的列表就没有任何关系了,无论之前的列表a怎么改变,d都不会变

    原因:深拷贝的内存

     

    深拷贝的内存地址不一样,开辟了新的内存空间,所以互相没有关系
    ————————————————
    原文链接:https://blog.csdn.net/qq_30758629/article/details/80859356

  • 相关阅读:
    改造vant日期选择
    css3元素垂直居中
    npm综合
    (转)网页加水印方法
    Mac下IDEA自带MAVEN插件的全局环境配置
    隐藏注册控件窗口
    High performance optimization and acceleration for randomWalk, deepwalk, node2vec (Python)
    How to add conda env into jupyter notebook installed by pip
    The Power of WordNet and How to Use It in Python
    背单词app测评,2018年
  • 原文地址:https://www.cnblogs.com/wiki918/p/11943135.html
Copyright © 2011-2022 走看看