校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識(shí)庫 > Python基礎(chǔ)之賦值,淺拷貝,深拷貝的區(qū)別

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

熱門標(biāo)簽:外呼不封號(hào)系統(tǒng) 江蘇房產(chǎn)電銷機(jī)器人廠家 悟空智電銷機(jī)器人6 幫人做地圖標(biāo)注收費(fèi)算詐騙嗎 蘇州電銷機(jī)器人十大排行榜 遼寧400電話辦理多少錢 電信營(yíng)業(yè)廳400電話申請(qǐng) 荊州云電銷機(jī)器人供應(yīng)商 溫州旅游地圖標(biāo)注

一、賦值

不會(huì)開辟新的內(nèi)存空間,只是復(fù)制了新對(duì)象的引用。所以當(dāng)一個(gè)數(shù)據(jù)發(fā)生變化時(shí),另外一個(gè)數(shù)據(jù)也會(huì)隨之改變。

二、淺拷貝

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

淺拷貝的三種形式:

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

淺拷貝要分兩種情況進(jìn)行討論:

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

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

首先,原來值的內(nèi)存地址與拷貝后的內(nèi)存地址不同。

  • 當(dāng)要拷貝的對(duì)象里面,沒有可變的子對(duì)象時(shí),原來值(拷貝值)的改變并不會(huì)影響拷貝值(原來值)。
  • 當(dāng)要拷貝的對(duì)象里面,有可以改變的子對(duì)象時(shí),改變?cè)撟訉?duì)象,原來值和拷貝值之間會(huì)互相影響。

三、深拷貝

深拷貝拷貝出來的對(duì)象是一個(gè)全新的對(duì)象,和原來的對(duì)象沒有任何的關(guān)聯(lián)。改變?cè)袑?duì)象不會(huì)影響新的拷貝對(duì)象。

四、例子

  • 不可變對(duì)象
import copy
# 不可變對(duì)象
# A = (1, 2, 'hello')   # 元組
# A = 1                 # 數(shù)值
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)

結(jié)果:

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

  • 可變對(duì)象
import copy
# 可變對(duì)象
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)

結(jié)果:

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

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

# 可變對(duì)象的外層修改
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)

結(jié)果:

********賦值********
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]]

  • 可變對(duì)象修改內(nèi)層
import copy
# 可變對(duì)象
A = [1, 2, 3, [11, 10, 20]]

# 可變對(duì)象的內(nèi)層修改
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)

結(jié)果

********賦值********
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]]

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

您可能感興趣的文章:
  • python批量創(chuàng)建變量并賦值操作
  • python中如何對(duì)多變量連續(xù)賦值
  • Python連續(xù)賦值需要注意的一些問題
  • python模塊中判斷全局變量的賦值的實(shí)例講解
  • python 使用pandas同時(shí)對(duì)多列進(jìn)行賦值
  • python 實(shí)現(xiàn)循環(huán)定義、賦值多個(gè)變量的操作
  • python for循環(huán)賦值問題

標(biāo)簽:臺(tái)灣 欽州 濟(jì)南 宿遷 三沙 喀什 景德鎮(zhèn) 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python基礎(chǔ)之賦值,淺拷貝,深拷貝的區(qū)別》,本文關(guān)鍵詞  Python,基礎(chǔ),之,賦值,淺,拷貝,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python基礎(chǔ)之賦值,淺拷貝,深拷貝的區(qū)別》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python基礎(chǔ)之賦值,淺拷貝,深拷貝的區(qū)別的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 六盘水市| 革吉县| 大名县| 伊川县| 天津市| 汉中市| 新源县| 奈曼旗| 方正县| 祁门县| 平阴县| 山西省| 宣恩县| 潞西市| 九江市| 陆良县| 长丰县| 融水| 娄底市| 外汇| 灵石县| 无为县| 甘肃省| 杭锦后旗| 蓝山县| 兴海县| 井研县| 神农架林区| 永平县| 乌什县| 孝感市| 太仆寺旗| 松原市| 康马县| 武城县| 苗栗市| 黑山县| 云龙县| 西藏| 和田县| 湛江市|