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

    1、赋值:

    1 list_1=[['a','b'],1,2]
    2 list_2=list_1
    3 
    4 print(list_1)
    5 print(list_2)
    
    >>>[['a', 'b'], 1, 2]
    >>>[['a', 'b'], 1, 2]

    在python3中赋值操作其实就是对象的应用,如上边的例子list_1与list_2这俩变量指向的都是同一块内存地址,也就是说list_2并没有重新开辟一块属于自己内存空间。

    (通过id( )函数可以查看对象的内存地址)

    1 print(id(list_1))
    2 print(id(list_2))

    >>>1656445373192
    >>>1656445373192

    共同指向同一个内存地址(1656445373192),如果把这块内存空间看成一个房间的话,那就是给这个房间找了两个主人,房间里的所有东西属于两人的公共财产,同进退,共生死!

     1 list_1=[['a','b'],1,2]
     2 list_2=list_1
     3 
     4 list_2[0][0]="aaa"
     5 list_1[2]=222
     6 
     7 print(list_1)
     8 print(list_2)
     >>>[['aaa', 'b'], 1, 222]
    >>>[['aaa', 'b'], 1, 222]
    10 del list_1 #deL函数只能删除变量名,对内存地址不做操作 11 print(list_2)
    >>>[['aaa', 'b'], 1, 222]

    11 list_2.clear() #clear()函数不删除变量名,但会清除对应的内存空间
    12 print(list_1)
    >>>[]

    2、浅拷贝

    1 list_1=[['a','b'],1,2]
    2 
    3 #浅拷贝的三种形式,结果是一样的
    4 list_2=list_1.copy()
    5 list_2=list_1[:]
    6 
    7 import  copy
    8 list_2=copy.copy(list_1)

    浅拷贝之所以称为浅拷贝,是它仅仅只拷贝了一层

    1 list_1=[['a','b'],1,2]
    2 list_2=list_1.copy()
    3 
    4 list_2[0][0]="aaa"
    5 list_2[2]=222
    6 print(list_1)
    7 print(list_2)
    >>>[['aaa', 'b'], 1, 2]
    >>>[['aaa', 'b'], 1, 222]

    如图所说:list_2=list_1.copy() 其实等于 list_2=[[000123],1,2]。也就是说只有小列表中的元素是两人的公共财产(好比俩人的孩子),1和2 赋予各自的私有财产。

    3、深拷贝

     1 list_1=[['a','b'],1,2]
     2 
     3 import copy
     4 list_2=copy.deepcopy(list_1)
     5 
     6 list_2[0][0]="aaa"
     7 list_2[2]=222
     8 
     9 print(list_1)
    10 print(list_2)
    >>>[['a', 'b'], 1, 2]
    >>>[['aaa', 'b'], 1, 222]

    深拷贝就比较直接了,就是很单纯的很粗暴的克隆一份数据出来自己玩,自己想咋作就咋作,跟别人无关。

    4、拷贝的警告  

      1、对于非容器类型,如数字,字符,以及其它“原子”类型,没有拷贝一说。产生的都是原对象的引用。

      2、如果元组变量值包含原子类型对象,即使采用了深拷贝,也只能得到浅拷贝。

  • 相关阅读:
    4、[重点]Mybatis配置解析
    3、Mybatis的CRUD实现
    mybatis程序容易出错的地方
    1、初识Mybatis
    容易忽略的基础
    读取.properties配置文件的几种方式:
    格式化数字显示
    安装ipa文件
    保活一个线程
    地图经纬度的问题
  • 原文地址:https://www.cnblogs.com/Adairye/p/8570929.html
Copyright © 2011-2022 走看看