zoukankan      html  css  js  c++  java
  • python中的对象存储以及深浅拷贝

    python的数据存储方式 

    >> a = [1, 2, 3]
    >>> b = a
    >>> a = [4, 5, 6] //赋新的值给 a
    >>> a
    [4, 5, 6]
    >>> b
    [1, 2, 3]
    # a 的值改变后,b 并没有随着 a 变
    >>> a = [1, 2, 3]
    >>> b = a
    >>> a[0], a[1], a[2] = 4, 5, 6 //改变原来 list 中的元素
    >>> a
    [4, 5, 6]
    >>> b
    [4, 5, 6]
    # a 的值改变后,b 随着 a 变了

    深浅拷贝

    浅拷贝:拷贝第一层内容.不拷贝内部子对象,用 [:]或copy() 。赋值, 没有创建新对象. 共用同一个对象,他们是相同的,赋值后的变量指向原有的内存地址

    深拷贝:拷贝所有内容. 包括内部的所有,形成一个新的对象,虽然与之前的值和内容一模一样,但是它们完完全全的两个对象,用deepcopy()


    >>> import copy 
    >>> origin = [1, 2, [3, 4]]
    #origin 里边有三个元素:1, 2,[3, 4]
    >>> cop1 = copy.copy(origin)
    >>> cop2 = copy.deepcopy(origin)
    >>> cop1 == cop2
    True
    >>> cop1 is cop2
    False
    #cop1 和 cop2 看上去相同,但已不再是同一个object
    >>> origin[2][0] = "hey!"
    >>> origin
    [1, 2, ['hey!', 4]]
    >>> cop1
    [1, 2, ['hey!', 4]]
    >>> cop2
    [1, 2, [3, 4]]
    #把origin内的子list [3, 4] 改掉了一个元素,观察 cop1 和 cop2
    总结:
    1、深拷贝是对源对象的赋值(深层对象),占用的内存空间不同
    2、浅拷贝是对最外层对象进行拷贝,占用的内存空间相同
    3、深拷贝:数据拷贝更加安全(容灾特性)
    4、浅拷贝:节省资源和内存空间
  • 相关阅读:
    web api 初体验之 GET和POST传参
    清除系统日志及数据库(sql server)日志最佳实践
    大家好啊!
    [oc学习笔记]多态
    [oc学习笔记]便利构造器无法被继承
    [oc学习笔记]字符串
    antd异步加载的树
    react新建页面步骤(新手必看)
    ECharts 经常会修改到的一些样式配置
    关于数组的一些常用方法
  • 原文地址:https://www.cnblogs.com/dmfcjd/p/11381542.html
Copyright © 2011-2022 走看看