概述
python中的增強賦值是從c語言中借鑑出來的,所以這些格式的用法大多和c一致,本身就是對表示式的簡寫,即二元表示式和賦值語句的結合,比如a += b 和a = a + b 就是一致的,比如還有以下的增強賦值語句。--
--
a += b
a &= b
a -= b
a |= b
a *= b
a ^= b
a /= b
a >>=b
a %= b
a <<= b
a **= b
a /程式設計客棧/=b
即增強賦值語句適用於任何支援隱式二元表示式的型別,比如「+」的多型:數字的相加和字串的合併
數字加減程式設計客棧
a = 1
a = a + 1
print(str(a))
a += 1
print(str(a))
示例結果:
23字串合併
s = 'i'
s = s + ' like '
print(s)
s += 'python.'tacjvyisk
print(s)
示例結果:
i like
i like python.
優點共享引用
當我們想要擴充套件列表時,比如將一組元素新增到末尾,我們會怎麼做?
l = [1, 2, 3]
# 傳統「+」法
l l + [4, 5]
print(l)
# 利用列表方法extend
l.extend([6, 7])
print(l)
示例結果
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6, 7]
示例中第一中「+」法,即採用合併的方法,需要新建立乙個物件把左側的l複製到新列表中,然後再[4, 5]複製到新列表中。而第二種extend則是直接在記憶體空間列表l末尾l加上[4, 5],即速度會更快,增強賦值則是自動採用的第二種即l.extend([6, 7])和l += [6, 7]是等價的,也是最優的選擇。這種合併方式雖然快,但對於可變物件的共享引用則會變的棘手些。
l1 = [1, 2, 3]
l2 = l1
l2 = l2 + [4, 5]
print(l2)
print(l1)
print('-' * 21)
l1 = [1, 2, 3]
l2 = l1
l2 += [4, 5]
print(l2)
print(l1)
示例結果:
tacjvyisk[1, 2, 3, 4, 5]
[1, 2, 3]
---------------------
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
我們可以從示例中看到如果同乙個可變物件賦值了多個變數,那麼在破壞共享引用結構時,就應該對可變物件拷貝後在進行操作。
總結本文標題: python增強賦值和共享引用注意事項小結
本文位址:
Python增強賦值及共享引用注意事項
python中的增強賦值是從c語言中借鑑出來的,所以這些格式的用法大多和c一致,本身就是對表示式的簡寫,即二元表示式和賦值語句的結合,比如a b和a a b就是一致的,比如還有以下的增強賦值語句。a b a b a b a b a b a b a b a b a b a b a b a b 即增強賦...
python 賦值 引用
在 python 中賦值語句總是建立物件的引用值,而不是複製物件。因此,python 變數更像是指標,而不是資料儲存區域,參見 1.在執行以下 的過程中 t temp t t 發現每次temp t新增乙個值時,t也會相同新增乙個值,經查詢,在 python 中賦值語句總是建立物件的引用值,而不是複製...
python 共享引用
在上一節中,我給大家介紹了單個變數被賦值引用多個物件的情況。然而,單個 乙個 物件被多個變數引用又是怎麼一回事兒呢?a 3 b a 先上圖 圖1 吧,大家一看就一目了然了 變數名和物件,在執行賦值語句b a之後,變數a,b都指向了物件3的記憶體空間.假設這時執行 a python a將指向剛建立的字...