perator @Star (*) zastosowany do list i liczb całkowitych [duplikat]

To pytanie ma już odpowiedź tutaj:

Lista zmian list nieoczekiwanie odzwierciedlona na listach podrzędnych 12 odpowiedzi

Powiedzmy, że mamyFoo class i chcemy utworzyć listęfoos, co możemy zrobić w następujący sposób:

foo_list = [Foo()] * 3

Teraz co, jeśli zrobimyfoo_list[0].x = 5? Ta instrukcja ustawi atrybutx dowszystk instancji na liście !!!

Gdy znalazłem to zaskoczyło mnie. Problem polega na tym, że kiedy tworzymy taką listę, najwyraźniej python utworzyFoo najpierw instancja, potem instancja listy, a następnie 3 razy dodaj do niej ten sam obiekt, ale naprawdę spodziewałbym się, że zrobi coś takiego:

foo_list = [Foo() for i in range(3)]

Ty też nie Cóż, teraz wiem, że zdecydowanie tosyntaktyczny cukierie można użyć @, ponieważ chciałem go użyć, ale w takim razie do czego służy? Jedyne, co mogę wymyślić, to stworzyć listę o początkowym rozmiarze:list = [None] * 5, a to nie ma dla mnie większego sensu w przypadku Pythona.

Czy ta składnia ma jakieś inne bardzo użyteczne przypadki użycia?

questionAnswers(3)

yourAnswerToTheQuestion