Является ли аргумент по умолчанию одним и тем же объектом для всех экземпляров?python constructor default аргумент список
class X():
def __init__(self,a=[]):
self.member=a
print id(a)
k=X([1,2,3])
g=X([1,2,3])
t=X()
h=X()
Выход меня удивляет:
140072782781832
140072782901976
140072782816536
140072782816536
Как вы можете видеть, идентификатор отличается, когда равен [1,2,3], но остается таким же, когда пусто. Однако, если я удалю self.member, теперь код выглядит следующим образом:
class X():
def __init__(self,a=[]):
print id(a)
k=X([1,2,3])
g=X([1,2,3])
t=X()
h=X()
Выход становится так:
140033294171528
140033294171528
140033294206232
140033294206232
Ид остаются теми же, когда равен [1,2,3 ].
Я полностью смущен ... Кто-нибудь может это объяснить?
Только первая половина вопроса является дубликатом этого. Вторая половина - новая. –