在 Python 中一切都可以看成物件。每個物件都有各自的 id, type 和 value。
一個物件可變與否就在於value 值是否支援改變。
相關學習推薦:python影片教學
#不可變物件
##常見的不可變物件(immutable objects):範例
>>> x=1 >>> y=x >>> id(x)==id(y) True >>> id(1)==id(y) True
>>>x=x+1
>>> x=x+1 >>> id(x)==id(y) False >>> id(x)==id(1) False >>> id(1)==id(y) True
>>> a=([1],2,3) >>> id(a) 4338862696 >>> id(a[0]) 4338949128 >>> a[0][0]=0 >>> id(a) 4338862696 >>> id(a[0]) 4338949128
可變物件
常見的可變物件(mutable objects):範例
>>> c = [1,2,3] >>> b = c >>> id(b)==id(c) True
c[0]=4
>>> id(c)==id(b) True
函數參數
對於可變對象和不可變對象,他們兩者在函數當作參數傳遞的時候表現也有所不同#例子
def update_list(nums_list):
print(f'2 id:{id(nums_list)}')
nums_list += [10]
print(f'3 id:{id(nums_list)}')
number_list = [5, 6]
print(f'1:{number_list}, id:{id(number_list)}')
update_list(number_list)
print(f'4:{number_list}, id:{id(number_list)}')
2 id:4457707912eg13 id:4457707912
在看另外一個例子
4:[5, 6, 10], id:4457707912
#def add_num(number):
print(f'2:{id(number)}')
number += 1
print(f'3:{id(number)}')
num = 1
print(f'1:{num}, id:{id(num)}')
add_num(num)
print(f'4:{num}, id:{id(num)}')
2 id:43437684163 id:4343768448
在有其他有些文章中,上面eg0 被稱為引用傳遞,eg1 被稱為值傳遞。然而在官方文件中,並沒有找到有關的這兩個名詞的任何內容,或者這種方式並不是上述的兩者任意一種。
4:1, id:4343768416
這裡的重點是:
對於可變對象,在函數中的值的改變,會導致對象改變;對於不可變對象,在函數中值的改變,對其不會造成任何影響以上是詳細分析之Python可變對象與不可變對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!