python不要使用可變物件作為引數的預設值

2022-04-03 01:22:41 字數 764 閱讀 8672

幽靈乘客例子:

、如上:如果為空時,bus2和bus3引用的是相同的乙個list,就會造成粗錯誤

實際工作中,如果不想改變某個引數值,那麼通過以上這種賦值也會改變

解決方式self.passenger=list(passenger),相當於把list(passenger)=passenger

舉個例子:

a和c引用的是相同的list物件  但b已經不是另外乙個新物件的引用了

a和c同時改變,b的改變是獨立的

如果一定要使用?應該怎樣定義可變型別預設值呢

def __init__(self,passenger=none):

if passenger ==none:

self.passenger=

這樣的話,就是為每個空值分配不同的物件

不要使用可變物件作為鍵

作為鍵的物件,你要保證它每次呼叫hashcode都返回相同值。這也是為什麼stringbuilder沒有像string那樣用char陣列重寫hashcode方法,而是直接用的繼承自object的hashcode。如果使用可變屬性來寫equals和hashcode方法,會導致使用map,set時一些不...

盡量不要使用可變引數

在某些情況下我們希望函式引數的個數可以根據實際需要來確定,所以c語言中就提供了一種長度不確定的引數,形如 c 語言也繼承了這一語言特性。在採用ansi標準形式時,引數個數可變的函式的原型是 typefuncname typepara1,typepara2,這種形式至少需要乙個普通的形式引數,後面的省...

1 不要使用可變物件作為函式預設值

23 return def list 4.6 in 3 my list 7 out 3 1 9 in 5 my other list 10 out 5 1,2 看到了吧,其實我們本來只想生成 2 但是卻把第一次執行的效果頁帶了進來 11 in 6 import time 12 in 7 def re...