給變數以資料,而不是給資料以變數
變數不存在實體,它僅僅是乙個標籤,一旦賦值就被設定到另乙個物體上,不變的是那些物體,即『物件』。python中所有的東西都是物件,包括函式、類、模組,甚至字串『hello',數字1,2,3都是物件。
多看幾個例子就明白了~
例:
a=1
b=2c=1
a=b
a和c指向同乙個物件整數1,給a賦值b後,a指向2。1和c都不受影響。
例:
a = 1
print('a', a, id(a))
b = 2
print('b', b, id(b))
c = 1
print('c', c, id(c))
# 再次賦值
a = b
print('a', a, id(a))
輸出:
a 1 4301490544
b 2 4301490576
c 1 4301490544
a 2 4301490576
id() 可以認為是獲取乙個物件的位址。可以看出,a 和 c 開始其實是同乙個位址,而後來賦值之後,a 又和 b 是同乙個位址。每次給變數重新賦值,它就指向了新的位址,與原來的位址無關了。
例:
a = [1,2,3]
print('a', a, id(a))
b = a
print('b', b, id(b))
b[1] = 5
print('a', a, id(a))
print('b', b, id(b))
輸出:
a [1, 2, 3] 4490723464
b [1, 2, 3] 4490723464
a [1, 5, 3] 4490723464
b [1, 5, 3] 4490723464
b 賦值為 a 後,和 a 指向同乙個列表物件。[1] 這個基於 index 的賦值是 list 物件本身的一種操作,並沒有給 b 重新貼標籤,改變的是物件本身。所以 b 指向的還是原來的物件,此物件的改動自然也會體現在 a 身上。
python 引數傳遞 Python 引數傳遞
python中的變數 乙個變數是區域性還是全域性,在編譯函式的時候就已經決定,因此讀變數值的時候也不會逐層向外查詢。變數是全域性還是局域,根據如下3條 1.如果函式內部有global語句,那麼它宣告的變數是全域性的。2.如果函式內部有對變數的賦值語句,那麼它是局域的。3.除此之外都是全域性的。注意1...
python 引數傳遞 python引數傳遞
python中函式引數的傳遞是通過 賦值 來傳遞的。但這條規則只回答了函式引數傳遞的 戰略問題 並沒有回答 戰術問題 也就說沒有回答怎麼賦值的問題。函式引數的使用可以分為兩個方面,一是函式引數如何定義,二是函式在呼叫時的引數如何解析的。而後者又是由前者決定的。函式引數的定義有四種形式 1.f arg...
python變數傳遞 Python引數傳遞
在 python 中,型別屬於物件,變數是沒有型別的 a 1,2,3 a runoob 以上 中,1,2,3 是 list 型別,runoob 是 string 型別,而變數 a 是沒有型別,她僅僅是乙個物件的引用 乙個指標 可以是指向 list 型別物件,也可以是指向 string 型別物件。可更...