zoukankan      html  css  js  c++  java
  • python深拷贝和浅拷贝

    is 和 == 的区别

    • is 比较两个引用是否指向同一个对象
    • == 比较两个对象是否相等
    >>> a = [1, 2]
    >>> b = [1, 2]
    >>> c = a
    >>> id(a)
    140275902517640
    >>> id(b)
    140275902517960
    >>> id(c)
    140275902517640
    >>> a == b      # a、b分别指向的对象值相等
    True
    >>> a is b      # a、b分别指向不同的对象 
    False
    >>> a is c       # a、c指向同一个对象
    True
    

    深拷贝和浅拷贝的区别

    • 深拷贝:复制了引用和内容
    • 浅拷贝: 仅复制了引用,未复制对象
    # 浅拷贝 a、b指向同一个对象地址
    >>> a = [1, 2]
    >>> b = a
    >>> id(a)
    140275902517704
    >>> id(b)
    140275902517704
    >>> a.append(3)   # 浅拷贝,修改a的值,b的值随之变化   【图1】
    >>> b
    [1, 2, 3]
    
    
    # 深拷贝
    >>> import copy
    >>> c = copy.deepcopy(a)
    >>> id(a)
    140275902517704
    >>> id(c)
    140275902301264
    >>> a.append(3)   # 深拷贝,修改a的值,c的值不变     【图2】
    >>> c
    [1, 2]
    
    
    >>> a = [1, 2]                                    # 【图3】
    >>> b = [3, 4]
    >>> c = [a, b]
    >>> d = copy.deepcopy(c)
    >>> d
    [[1, 2], [3, 4]]
    >>> a.append(3)
    >>> c
    [[1, 2, 3], [3, 4]]    # 浅拷贝
    >>> d
    [[1, 2], [3, 4]]       # 深拷贝
    
    
    >>> a = [1, 2]                                    # 【图4】
    >>> b = [3, 4]
    >>> c = [a, b]
    >>> d = copy.copy(c)
    >>> d
    [[1, 2], [3, 4]]
    >>> a[0] = 0
    >>> d
    [[0, 2], [3, 4]]
    
    
    # copy当拷贝一个不可变类型数据时,只会进行浅拷贝
    a = [1, 2]
    b = [3, 4]
    c = (a, b)
    d = copy.copy(c)
    
  • 相关阅读:
    SHELL种类,版本及选择
    delete
    ctrl+alt+l:linux 锁屏 win+l:windows锁屏
    inux关于readlink函数获取运行路径的小程序
    网络版shell之网络编程练习篇--telnet服务端
    CentOS 6.5配置nfs服务
    linux操作系下RAR的使用
    BLOB二进制对象(blob.c/h)
    循环队列
    java的System.getProperty()方法能够获取的值
  • 原文地址:https://www.cnblogs.com/ericness/p/12641675.html
Copyright © 2011-2022 走看看