最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的復(fù)制操作及copy模塊中的淺拷貝與深拷貝方法

 更新時間:2016年07月02日 10:50:26   作者:cangmean  
淺拷貝和深拷貝是Python基礎(chǔ)學(xué)習(xí)中必須辨析的知識點,這里我們將為大家解析Python中的復(fù)制操作及copy模塊中的淺拷貝與深拷貝方法:

程序中常常需要復(fù)制一個對象, 按思路應(yīng)該是這樣的

a = [1, 2, 3]
b = a

# [1, 2, 3]
print b 

已經(jīng)復(fù)制好了,但是現(xiàn)在得改變一下第一個元素的值把它改成5

b[0] = 5 

# [5, 2, 3]
print b 

# [5, 2, 3]
print a 

我改變了b的第一個元素的值,但是a的值也改變了,這是因為python中的=是引用.a和b指向的是相同的列表,所以改變列表會出現(xiàn)以上的結(jié)果.

解決方法是切片操作

a = [1, 2, 3]
b = a[:]
b[0] = 4

# [1, 2, 3]
# [4, 2, 3]
print a
print b

但是在嵌套列表的時候呢,試一試

a = [[1,2,3], 4, 5]
b = a[:]
b[1] = 0 

# [[1,2,3], 4, 5]
# [[1,2,3], 0, 5]
print a
print b

恩!沒什么問題,在試一試嵌套列表元素

a = [[1,2,3], 4, 5]
b = a[:]
b[0][0] = 5

# [[5,2,3], 4, 5]
# [[5,2,3], 4, 5]
print a
print b
b = a[:]

a的值還是改變了,切片復(fù)制只對該對象進行拷貝不會對子元素進行拷貝

copy 模塊

copy模塊用于對象的拷貝操作。該模塊非常簡單,只提供了兩個主要的方法: copy.copy 與 copy.deepcopy ,分別表示淺復(fù)制與深復(fù)制。什么是淺復(fù)制,什么是深復(fù)制,網(wǎng)上有一卡車一卡車的資料,這里不作詳細介紹。復(fù)制操作只對復(fù)合對象有效。用簡單的例子來分別介紹這兩個方法。

淺復(fù)制只復(fù)制對象本身,沒有復(fù)制該對象所引用的對象。

#coding=gbk
import copy
l1 = [1, 2, [3, 4]]
l2 = copy.copy(l1)
print l1
print l2
l2[2][0] = 50
print l1
print l2

結(jié)果:

[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4]]
[1, 2, [50, 4]]

同樣的代碼,使用深復(fù)制,結(jié)果就不一樣:

import copy
l1 = [1, 2, [3, 4]]
l2 = copy.deepcopy(l1)
print l1
print l2
l2[2][0] = 50
print l1
print l2

結(jié)果:

[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4]]

改變copy的默認行為

在定義類的時候,通過定義__copy__和__deepcopy__方法,可以改變copy的默認行為。下面是一個簡單的例子:

class CopyObj(object):
  def __repr__(self):
    return "CopyObj"
  
  def __copy__(self):
    return "Hello"
obj = CopyObj()
obj1 = copy.copy(obj)
print obj
print obj1

結(jié)果:

CopyObj
Hello

相關(guān)文章

  • 詳解Python3序列賦值、序列解包

    詳解Python3序列賦值、序列解包

    這篇文章主要介紹了Python3序列賦值、序列解包的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • Python魔法方法功能與用法簡介

    Python魔法方法功能與用法簡介

    這篇文章主要介紹了Python魔法方法功能與用法,結(jié)合具體實例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計中魔法方法的概念、功能、原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-04-04
  • Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫基本操作大全

    Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫基本操作大全

    在后端應(yīng)用開發(fā)中,經(jīng)常會用到Postgres/Mysql/Mongo這三種數(shù)據(jù)庫的基本操作,今天小編就給大家詳細介紹Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫基本操作,感興趣的朋友一起看看吧
    2021-06-06
  • Python生態(tài)圈圖像格式轉(zhuǎn)換問題(推薦)

    Python生態(tài)圈圖像格式轉(zhuǎn)換問題(推薦)

    在Python生態(tài)圈里,最常用的圖像庫是PIL——盡管已經(jīng)被后來的pillow取代,但因為pillow的API幾乎完全繼承了PIL,所以大家還是約定俗成地稱其為PIL。這篇文章主要介紹了Python生態(tài)圈圖像格式轉(zhuǎn)換問題,需要的朋友可以參考下
    2019-12-12
  • python中利用隊列asyncio.Queue進行通訊詳解

    python中利用隊列asyncio.Queue進行通訊詳解

    asyncio是Python 3.4版本引入的標準庫,直接內(nèi)置了對異步IO的支持。 下面這篇文章主要給大家介紹了關(guān)于python中利用隊列asyncio.Queue進行通訊的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-09-09
  • win7下python3.6安裝配置方法圖文教程

    win7下python3.6安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了win7下python3.6安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • python3讀取csv和xlsx文件的實例

    python3讀取csv和xlsx文件的實例

    今天小編就為大家分享一篇python3讀取csv和xlsx文件的實例,具有很好的參考價值,希望對的大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python3中for循環(huán)踩過的坑記錄

    python3中for循環(huán)踩過的坑記錄

    這篇文章主要給大家介紹了python3中for循環(huán)踩坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python Pygame實現(xiàn)俄羅斯方塊

    Python Pygame實現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細介紹了Python Pygame實現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Python IDE Pycharm中的快捷鍵列表用法

    Python IDE Pycharm中的快捷鍵列表用法

    在本篇文章里小編給大家整理的是關(guān)于Python IDE Pycharm中的快捷鍵列表用法,需要的朋友們收藏下
    2019-08-08

最新評論

广河县| 天峨县| 徐水县| 夏邑县| 桂平市| 莎车县| 曲麻莱县| 华亭县| 陵川县| 榆树市| 锡林郭勒盟| 资源县| 恩平市| 贵溪市| 呼和浩特市| 东光县| 嵩明县| 团风县| 临猗县| 宜川县| 望城县| 二手房| 普安县| 县级市| 炎陵县| 秦皇岛市| 伊通| 信阳市| 西贡区| 石首市| 财经| 泌阳县| 互助| 汝南县| 温宿县| 上犹县| 饶平县| 正宁县| 锦州市| 舒城县| 色达县|