亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python基礎之賦值,淺拷貝,深拷貝的區(qū)別

 更新時間:2021年04月30日 14:25:09   作者:心煩啊  
這篇文章主要介紹了Python基礎之賦值,淺拷貝,深拷貝的區(qū)別,文中有非常詳細的代碼示例,對正在學習python基礎的小伙伴們也有非常好的幫助,需要的朋友可以參考下

一、賦值

不會開辟新的內存空間,只是復制了新對象的引用。所以當一個數據發(fā)生變化時,另外一個數據也會隨之改變。

二、淺拷貝

創(chuàng)建新對象,其內容是對原對象的引用。淺拷貝之所以稱為淺拷貝,是因為它僅僅只拷貝了第一層,即只拷貝了最外層的對象本身,內部的元素都只是拷貝了一個引用而已,即內部元素如果被修改,則另外一個數據也會發(fā)生變化。

淺拷貝的三種形式:

A = [1, 2, 3, 4]
  • 切片操作
# 第1種
B = A[:]
# 第2種
B = [a for a in A]
  • 工廠函數
B = list(A)
  • copy函數
B = copy.copy(A)

淺拷貝要分兩種情況進行討論:

1)當淺拷貝的值是不可變對象(例如字符串、元組、數值類型)時,和賦值情況一樣,對象的內存地址(id())與淺拷貝原來的值一致。

2)當淺拷貝的值是可變對象(例如列表、字典、集合等)時,也需要分兩種情況討論:

首先,原來值的內存地址與拷貝后的內存地址不同。

  • 當要拷貝的對象里面,沒有可變的子對象時,原來值(拷貝值)的改變并不會影響拷貝值(原來值)。
  • 當要拷貝的對象里面,有可以改變的子對象時,改變該子對象,原來值和拷貝值之間會互相影響。

三、深拷貝

深拷貝拷貝出來的對象是一個全新的對象,和原來的對象沒有任何的關聯。改變原有對象不會影響新的拷貝對象。

四、例子

  • 不可變對象
import copy
# 不可變對象
# A = (1, 2, 'hello')   # 元組
# A = 1                 # 數值
A = 'hello'             # 字符串

print("********賦值********")
B = A
print(id(A))
print(id(B))
print(A)
print(B)

print("********淺拷貝********")
B = copy.copy(A)
print(id(A))
print(id(B))
print(A)
print(B)

print("********深拷貝********")
B = copy.deepcopy(A)
print(id(A))
print(id(B))
print(A)
print(B)

結果:

********賦值********
1894005658264
1894005658264
hello
hello
********淺拷貝********
1894005658264
1894005658264
hello
hello
********深拷貝********
1894005658264
1894005658264
hello
hello

  • 可變對象
import copy
# 可變對象
A = [1, 2, 3]

print("********賦值********")
B = A
print(id(A))
print(id(B))
print(A)
print(B)

print("********淺拷貝********")
B = copy.copy(A)
print(id(A))
print(id(B))
print(A)
print(B)

print("********深拷貝********")
B = copy.deepcopy(A)
print(id(A))
print(id(B))
print(A)
print(B)

結果:

********賦值********
1602694308360
1602694308360
[1, 2, 3]
[1, 2, 3]
********淺拷貝********
1602694308360
1602694308424
[1, 2, 3]
[1, 2, 3]
********深拷貝********
1602694308360
1602950316296
[1, 2, 3]
[1, 2, 3]

  • 可變對象修改外層
import copy
# 可變對象
A = [1, 2, 3, [11, 10, 20]]

# 可變對象的外層修改
B1 = A                   # 賦值
B2 = copy.copy(A)        # 淺拷貝
B3 = copy.deepcopy(A)    # 深拷貝
A.append(4)
print("********賦值********")

print(id(A))
print(id(B1))
print(A)
print(B1)

print("********淺拷貝********")
print(id(A))
print(id(B2))
print(A)
print(B2)

print("********深拷貝********")
print(id(A))
print(id(B3))
print(A)
print(B3)

結果:

********賦值********
2215309238856
2215309238856
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20], 4]
********淺拷貝********
2215309238856
2215593496776
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20]]
********深拷貝********
2215309238856
2215593518024
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20]]

  • 可變對象修改內層
import copy
# 可變對象
A = [1, 2, 3, [11, 10, 20]]

# 可變對象的內層修改
B1 = A                   # 賦值
B2 = copy.copy(A)        # 淺拷貝
B3 = copy.deepcopy(A)    # 深拷貝
A[3].append(4)
print("********賦值********")

print(id(A))
print(id(B1))
print(A)
print(B1)

print("********淺拷貝********")
print(id(A))
print(id(B2))
print(A)
print(B2)

print("********深拷貝********")
print(id(A))
print(id(B3))
print(A)
print(B3)

結果

********賦值********
2288591069768
2288591069768
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20, 4]]
********淺拷貝********
2288591069768
2288847138760
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20, 4]]
********深拷貝********
2288591069768
2288847168264
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20]]

到此這篇關于Python基礎之賦值,淺拷貝,深拷貝的區(qū)別的文章就介紹到這了,更多相關Python賦值 淺拷貝 深拷貝的區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python繪制封閉多邊形教程

    python繪制封閉多邊形教程

    今天小編就為大家分享一篇python繪制封閉多邊形教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python自動化辦公之文件整理腳本分享

    Python自動化辦公之文件整理腳本分享

    這篇文章主要為大家分享了一個Python自動化辦公腳本,可以實現文件整理,這是一個很有用的技能,可以幫助你管理你的電腦上的各種文件,需要的可以收藏一下
    2023-08-08
  • Python中關于?*args與**args的用法及說明

    Python中關于?*args與**args的用法及說明

    這篇文章主要介紹了Python中關于?*args與**args的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 淺析Python多線程下的變量問題

    淺析Python多線程下的變量問題

    這篇文章主要介紹了Python多線程下的變量問題,由于GIL的存在,Python的多線程編程問題一直是開發(fā)者中的熱點話題,需要的朋友可以參考下
    2015-04-04
  • python對視頻畫框標記后保存的方法

    python對視頻畫框標記后保存的方法

    今天小編就為大家分享一篇python對視頻畫框標記后保存的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python加密word文檔詳解

    Python加密word文檔詳解

    這篇文章主要介紹了Python實現對word文檔添加密碼去除密碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Python生成九宮格圖片的示例代碼

    Python生成九宮格圖片的示例代碼

    這篇文章主要介紹了Python生成九宮格圖片的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Python中單例模式總結

    Python中單例模式總結

    單例模式(Singleton Pattern)是一種常用的軟件設計模式,該模式的主要目的是確保某一個類只有一個實例存在。當你希望在整個系統中,某個類只能出現一個實例時,單例對象就能派上用場。
    2018-02-02
  • Python在報表自動化的優(yōu)勢及實現流程

    Python在報表自動化的優(yōu)勢及實現流程

    本文利用Python實現報表自動化,通過介紹環(huán)境設置、數據收集和準備、報表生成以及自動化流程,展示Python的靈活性和豐富的生態(tài)系統在報表自動化中的卓越表現,從設置虛擬環(huán)境到使用Pandas和Matplotlib處理數據,到借助APScheduler實現定期自動化,每個步驟都得到詳盡闡述
    2023-12-12
  • Django集成Celery實現高效的異步任務處理的全過程

    Django集成Celery實現高效的異步任務處理的全過程

    Django?作為一個強大的?Python?Web?框架,可以通過集成?Celery?這一異步任務隊列來優(yōu)化這些任務的處理,本文將深入探討如何在?Django?項目中集成?Celery,包括?Celery?的基本配置、定義任務、以及監(jiān)控任務執(zhí)行,需要的朋友可以參考下
    2023-11-11

最新評論