python类对象赋值_Python对象赋值、浅拷贝、深拷贝
Python中,基本數(shù)據(jù)類(lèi)型,理解為常見(jiàn)數(shù)據(jù)類(lèi)型:布爾型、整型、浮點(diǎn)型、字符串、列表、元組、字典、集合,隨語(yǔ)言不同而不同,但是根據(jù)在內(nèi)存中存儲(chǔ)方式的不同,區(qū)分開(kāi)原子類(lèi)型和容器類(lèi)型。
對(duì)象賦值
對(duì)象的賦值都是進(jìn)行(對(duì)象引用傳遞)/(內(nèi)存地址傳遞)/(內(nèi)存引用),所以當(dāng)一個(gè)對(duì)象改變,另一個(gè)同步改變。
結(jié)合代碼思考
···
will = ["Will", 28, ["Python", "C#", "JavaScript"]] # 元素的數(shù)據(jù)類(lèi)型有原子類(lèi)型和容器類(lèi)型
wilber = will
print id(will) # will的id
print will
print [id(ele) for ele in will] # will中每個(gè)元素的id
print id(wilber) # wilber的id == will的id
print wilber
will[0] = "Wilber" # 改動(dòng)will中的元素0
will[2].append("CSS") # 改動(dòng)will中的元素2
print id(will) # will的id沒(méi)變
print will
print [id(ele) for ele in will]
print id(wilber) # wilber
print wilber
print [id(ele) for ele in wilber]
···
淺拷貝
淺拷貝對(duì)象是容器類(lèi)型,原子類(lèi)型只有對(duì)象賦值。淺拷貝會(huì)新起一個(gè)對(duì)象,將原容器包含的內(nèi)存地址引用過(guò)去。當(dāng)原容器包含的元素有可變的(即容器對(duì)象),容器元素的改變也會(huì)引起新拷貝對(duì)象內(nèi)元素的改變。
結(jié)合代碼思考
import copy
will = ["Will", 28, ["Python", "C#", "JavaScript"]]
wilber = copy.copy(will)
print id(will)
print will
print [id(ele) for ele in will]
print id(wilber)
print wilber
print [id(ele) for ele in wilber]
will[0] = "Wilber"
will[2].append("CSS")
print id(will)
print will
print [id(ele) for ele in will]
print id(wilber)
print wilber
print [id(ele) for ele in wilber]
深拷貝
深拷貝對(duì)象也是容器類(lèi)型,原子類(lèi)型只有對(duì)象賦值。深拷貝和淺拷貝一樣,也會(huì)根據(jù)原對(duì)象深拷貝新起一個(gè)對(duì)象,但是會(huì)將元素里面的容器類(lèi)型的新拷貝一份(默認(rèn)深入新拷貝層數(shù)好像是1),因此原對(duì)象的容器元素改變了,新對(duì)象的容器元素不會(huì)改變。
結(jié)合代碼思考
import copy
will = ["Will", 28, ["Python", "C#", "JavaScript"]]
wilber = copy.deepcopy(will)
print id(will)
print will
print [id(ele) for ele in will]
print id(wilber)
print wilber
print [id(ele) for ele in wilber]
will[0] = "Wilber"
will[2].append("CSS")
print id(will)
print will
print [id(ele) for ele in will]
print id(wilber)
print wilber
print [id(ele) for ele in wilber]
總結(jié)
數(shù)據(jù)結(jié)構(gòu)+算法,需要反復(fù)學(xué)習(xí)+理解+記憶。
總結(jié)
以上是生活随笔為你收集整理的python类对象赋值_Python对象赋值、浅拷贝、深拷贝的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 更换ip地址_手机怎么改ip地址
- 下一篇: python接收邮件g_Python接收