Python自學指南---基礎篇(二)變量賦值

2.1 賦值運算符(=),引用傳遞

我們可以直接將一個固定的數值、字符串、算術表達式、甚至函數賦值給一個變量,也可將一個變量賦值給另一個變量。

anInt = 1
aStr = 'abc'
aFloat = 4 * 5 * 6
aList = [1, 'who', 3.14]

這裏需要提到一個非常基礎且重要的知識點,在Python中,所有的變量都可以理解是內存中一個對象的“引用”,變量的賦值是引用傳遞,而非值傳遞

可以把變量是內存中一個對象的“引用”,簡單理解爲給對象取了一個名字,或者打上了一個標籤,比如a=1,就是將對象“1”起名爲“a”。很多地方會採用一種說法:a指向1。

可以通過一個例子來理解:

a = 1
id(a)  #id(…)用於輸出變量的地址,此處輸出變量a的地址
b = 2
id(b)
b = a
id(b)
print(b)

這段代碼輸出的結果是:

140360412074952
140360412074928  #b的初始地址
140360412074952  #b的地址變爲與a相同
1              

利用id(…)可以輸出某一個變量的地址,可以發現在執行了b = a之後,b不僅與a的值相同,b的地址也與a相同,這也就體現了Python的賦值是“引用傳遞”,即此時b是a的一個別名,這兩個變量所保存的對象是一個對象(地址相同)
如果在C++中執行b = a,就會產生不同的結果

int a = 1;
int b = 2;
cout<<&a<<endl;  //c++中利用&取變量地址
cout<<&b<<endl;
b = a
cout<<&b<<endl;
cout<<b<<endl;

輸出結果:

0x7ffcb30f82fc 
0x7ffcb30f82f8
0x7ffcb30f82f8 
1   //b只改變了值,地址未改變

可見,C++中相同語句b=a執行的就是值傳遞,b只有值與a相同。
Python中引用傳遞的概念先提這麼多,在之後介紹對象、函數的過程中會再次遇到。

2.2 一般的賦值語法

Python除了可以直接將一個值或變量賦值給另一個變量之外,也有許多其他的賦值語法。

  1. 鏈式賦值
a = b = c = 1
  1. 增量賦值
a += 1  #等價於a = a + 1
a %= 2  #等價於a = a % 2

需要注意的是Python不支持類似於這樣的自增運算符:x++ ++x

  1. 多元賦值
    多元賦值的特性允許一個語句對多個變量分別賦不同值
a, b, c = 1, 2, 3 # a = 1, b = 2, c = 3

這時等號兩邊的對象實際上都是一個元組(tuple),即一個不可變的序列集合,因此嚴格來說,上述代碼原本的形式是:

(a, b, c) = (1, 2, 3)

當然不加小括號在語法上不會有錯誤,《Python核心編程》中建議添加小括號,以增強可讀性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章