在Python中,
類型屬於對象,變量是沒有類型的:
以上代碼這種,[1,2,3]是 List 類型,「Runoob」 是 String 類型,而變量 a 是沒有類型,它僅僅是一個對象的引用(一個指針),能夠是 List 類型對象,也能夠指向 String 類型對象
- 可更改(mutable)與不可更改(immutable)對象
在 Python 中,string 、tuples,和 numbers 是不可更改的對象,而 list,dict 則是能夠修改的對象
變量賦值 a = 5,後賦值 a = 10,實際是新生成一個 int 值對象10,再讓 a 指向 它,而5被丟棄,不是改變 a 的值,至關於新生成了 a
變量賦值 la = [1,2,3,4]後再賦值 la[2] = 5,則是將 list la 的第三個元素值更改,自己 la 沒有動,只是其內部的一部分值被修改
相似 c++ 的值傳遞,如整數、字符串、元祖。如 fun(a) ,傳遞的只是 a 的值,沒有影響 a 對象自己,好比在 fun(a) 內部修改 a 的值,只是修改另外一個複製的對象,不會影響 a 自己
#Pyton 傳不可變對象實例
def ChangeInt(a):
print a #按傳值的方式賦值變量 b,a和b都指向了用一個int對象 2
a =10 # a 又指向了 int 對象 10
b = 2
ChangeInt(b)
print b
# 輸出
2
2
實例中有 int 對象 2,指向了 變量 b ,在傳遞給 ChangeInt 函數時,按傳值的方式賦值了變量 b(
即賦值了引用),因此a 和 b都指向了同一個 Int 對象 2 ,在 a =10 時,則新生成一個 int值對象 10,並讓 a 指向它
相似 c++ 的引用傳遞,如列表、字典。如 fun(la) ,則將 la 真正的傳過去,修改後 fun 外部的 la 也會受影響
def changeMe(mylist):
"傳入修改的列表"
mylist.append([1,2,3,4])
print ('函數內取值' ,mylist)
return
#調用 changeMe()
mylist = [10,20,30]
changeMe(mylist)
print ('函數外取值',mylist)
#輸出
函數內取值: [10, 20, 30, [1, 2, 3, 4]]
函數外取值: [10, 20, 30, [1, 2, 3, 4]]
傳入函數的和爲末尾添加新內容給的對象用的是用同一個引用