Python增強賦值和共享引用注意事項小結

2022-10-04 17:27:13 字數 1554 閱讀 7193

概述

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將指向剛建立的字...