Python增強賦值及共享引用注意事項

2021-09-23 18:50:17 字數 1788 閱讀 4512

python中的增強賦值是從c語言中借鑑出來的,所以這些格式的用法大多和c一致,本身就是對表示式的簡寫,即二元表示式和賦值語句的結合,比如a += ba = 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 =

1a = a +

1print

(str

(a))

a +=

1print

(str

(a))

示例結果:

2

3

字串合併
s =

'i's = s +

' like '

print

(s)s +=

'python.'

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)

示例結果:

[1, 2, 3, 4, 5]

[1, 2, 3]

---------------------

[1, 2, 3, 4, 5]

[1, 2, 3, 4, 5]

我們可以從示例中看到如果同乙個可變物件賦值了多個變數,那麼在破壞共享引用結構時,就應該對可變物件拷貝後在進行操作。

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 程...

Python中多目標賦值及共享引用的問題

多目標賦值語句就是直接把所有提供的變數名都賦值給右側的物件。a b c spam 將字串 spam 同時賦值給a,b,c a,b,c spam spam spam 上面的語句相當於下面的簡單賦值 c spam b c a b a,b,c spam spam spam 在這裡只有乙個物件,由三個變數共...

python 賦值 引用

在 python 中賦值語句總是建立物件的引用值,而不是複製物件。因此,python 變數更像是指標,而不是資料儲存區域,參見 1.在執行以下 的過程中 t temp t t 發現每次temp t新增乙個值時,t也會相同新增乙個值,經查詢,在 python 中賦值語句總是建立物件的引用值,而不是複製...