賦值語(yǔ)句其實(shí)在例子中經(jīng)常使用,其中包括對(duì)變量和一些數(shù)據(jù)結(jié)構(gòu)的元素進(jìn)行賦值;但是賦值方法不止這些,還有如序列解包、鏈?zhǔn)劫x值和增量賦值等方法,那么python如何賦值呢?一起來(lái)了解下吧:
?
python如何賦值
?
?
python的賦值,尤其是涉及到兩個(gè)變量時(shí)候二者之間有某種計(jì)算關(guān)系的時(shí)候,可以省去臨時(shí)變量。
?
比如C語(yǔ)言中的一段:
?
temp=n
?
n=n+m
?
m=temp
?
就可以在python中簡(jiǎn)單寫(xiě)作:
?
m,n=n,n+m
?
Python如何*最小賦值
?
碼代碼時(shí),有時(shí)候需要根據(jù)比較大小分別賦值:
?
import random
?
seq = [random.randint(0, 1000) for _ in range(100)]
?
#方法1:
?
xmax, xmin = max(seq), min(seq)
?
#方法2:
?
xmax, *_, xmin = sorted(seq)
?
從上面這個(gè)來(lái)看,看不出來(lái)方法2的優(yōu)勢(shì)來(lái),不過(guò)我們常用的是比較兩個(gè)數(shù)的大小,并選?。?
?
dx, dy = random.sample(seq, 2)
?
#方法1:
?
dx, dy = min(dx, dy), max(dx, dy)
?
#方法2:
?
dx, dy = sorted((dx, dy))
?
Python如何選擇賦值
?
兩個(gè)對(duì)象做比較有兩種方式,分別是:is與 == ,is比較的是兩個(gè)對(duì)象是否相同,通過(guò)對(duì)象的ID值可識(shí)別是否為相同對(duì)象,==比較的是兩個(gè)對(duì)象的值是否相等。
?
x1 = [1,2,1]
?
x2 = [1,2,1]
?
print(x1 is x2)
?
print(x1 == x2)
?
print(id(x1))
?
print(id(x2))
?
False
?
True
?
2004573077256
?
2004573077448
?
?
上面我們對(duì)x1和x2進(jìn)行賦值,相對(duì)于給兩個(gè)變量分別取了名字x1和x2,兩個(gè)名字雖然都是列表[1,2,1],但在內(nèi)存中是兩個(gè)獨(dú)立的不同的對(duì)象,占據(jù)不同的內(nèi)存空間,就好比兩個(gè)名字一樣的人,實(shí)則為兩個(gè)不同的人。
?
x3 = x2
?
print(x2 is x3)
?
True
?
上面我們將x2對(duì)應(yīng)的對(duì)象綁定了一個(gè)新的名字叫x3,這就好比一個(gè)人,開(kāi)始給他取了一個(gè)x2的大名,后來(lái)又給他取了一個(gè)x3的小名,本質(zhì)上還是同一個(gè)人,所以,x2和x3所指的其實(shí)是同一個(gè)對(duì)象。
?
通過(guò)x2修改對(duì)象時(shí),x3也會(huì)跟著變化,因?yàn)楸举|(zhì)上它們是同一個(gè)對(duì)象,這就好比一個(gè)人大名x2,小名x3,x2長(zhǎng)了一歲相對(duì)于x3也長(zhǎng)了一歲。
?
x2.append(2)
?
print(x2)
?
print(x3)
?
[1, 2, 1, 2]
?
[1, 2, 1, 2]
?
但是,當(dāng)我們給x2重新賦值時(shí),相當(dāng)于x2不再引用之前的對(duì)象,而引用新對(duì)象,x3依然引用之前的對(duì)象。好比一個(gè)人的大名x2和小名x3,給x2重新賦值就相當(dāng)于給另外一個(gè)人取大名x2,但是x3還是開(kāi)始那個(gè)人的小名。
?
x2 = [3,4,3]
?
print(x2)
?
print(x3)
?
[3, 4, 3]
?
[1, 2, 1, 2]
?
python的賦值和賦址
?
python的數(shù)字和字符串的值是不變的(元祖也是不可變的),所以當(dāng)一個(gè)變量(數(shù)字或字符串)進(jìn)行值改變的操作時(shí),其實(shí)是新開(kāi)辟了一個(gè)地址來(lái)存放這個(gè)新值。?
?
例如:
?
>>>a=2
?
>>>b=a
?
>>>a=3
?
>>>b
?
當(dāng)執(zhí)行a=3時(shí),其實(shí)是新開(kāi)辟了一塊內(nèi)存空間來(lái)存放3,并且把索引a從2那邊解除,指向了存放3的內(nèi)存地址。所以?
?
a的值是3,但是b還是2。因?yàn)閎依舊指向2所在的內(nèi)存空間。
?
再來(lái)看看其他非數(shù)字和字符串的操作,例如列表,
?
>>>a=[2]
?
>>>b=a
?
>>>a.append(3)
?
>>>b
?
[2,3]
?
當(dāng)執(zhí)行a.append時(shí),因?yàn)榱斜淼闹凳强梢宰兓?,所以就在原?lái)的存放a的內(nèi)存地址改變了a的值,由于a,b?
?
是指向同一地址空間的索引,所以當(dāng)此內(nèi)存地址所存儲(chǔ)的值被改變時(shí),打印b時(shí),b的值也變化了。
?