zoukankan      html  css  js  c++  java
  • Python中的深浅拷贝

    一、可变数据类型和不可变数据类型

    1、不可变数据类型:字符串、数值、元祖

    所有值相同的不可变数据类型都指向同一个内存空间,当对某个不可变数据类型赋值的时候,实际上是指向了另一块内存空间。

    a = 1
    b = a
    print(a)  #1
    print(b)  #1
    #a和b的值相同,指向同一块内存空间
    
    a = 2
    print(a)  #2
    print(b)  #1
    #a和b的值不同,指向不同的内存空间,b没变,只是a指向了另一个空间

    2、可变数据类型:列表、字典、集合

    对于可变数据类型的操作不会改变其指向的内存地址,但是直接赋值还是会改变。

    l1 = [111,222]
    l2 = l1
    #l1和l2都是[111,222]
    
    l1.append(333)
    #l1和l2都变成[111,222,333]
    
    l1 = [111]
    #l1变了,l2不变

    二、赋值和深浅拷贝

    1、=赋值

    在python中,=赋值的双方完全共享同一块内存空间,如果是可变数据类型,那么一方的改动会影响另一方。

    2、浅拷贝

    浅拷贝开辟一块新的内存空间,保存同样的数据内容,一方在第一层的改动不会影响另一方,但是在第二层及以下的改动仍然会影响。举例,[111,222,[1,2,3]],这样一个列表,如果浅拷贝后对这个列表里的列表进行改动,仍然会影响另一方。

    因为浅拷贝对于子对象只是复制了其指向的内存地址,所以仍然会影响源数据。

    浅拷贝通过copy.copy()使用

    3、深拷贝

    深拷贝不仅开辟一块新的内存空间,复制同样的内容,且对子对象也复制一份,开辟一块内存空间,这样双方指向的都是完全不同的地址,任何改动都不影响双方。

    深拷贝通过copy.deepcopy()使用

  • 相关阅读:
    css overflow失效的原因
    css3过渡动画 transition
    css3动画 2D 3D transfrom
    百度前端学院第7-8天笔记,百度前端学院系统维护,所以转战仿京东项目。
    position 的absolute会使display变成inline-block
    css 布局 flex
    sqli-labs lesson5-6 布尔盲注 报错注入 延时注入
    sqli-labs lesson1-4
    有关SQL注入的一些小知识点
    DVWA(三):SQL injection 全等级SQL注入
  • 原文地址:https://www.cnblogs.com/yinwenjie/p/10959640.html
Copyright © 2011-2022 走看看