2015-11-29 17 views
6

Mój wykładowca postawił kilka pytań na temat Pythona, a ten wprawił mnie w zakłopotanie, nie rozumiem, co się dzieje.Dlaczego Python rozszerza wyjście [[...]]

x = [[]] 
x[0].extend(x) 

Python mówi mi, po uruchomieniu tego, że x jest [[...]], co robi ... oznacza?

uzyskać jeszcze bardziej zdezorientowany, gdy wynik po to właśnie [[]]

y = [] # equivalent to x[0] 
x = [[]] 
y.extend(x) 

Jeśli y oblicza się [[]] nie x należy obliczyć po prostu będąc [[[]]]?

Co to jest przedłużenie? i co oznacza ...?

+0

Ponieważ 'x' odnosi się do siebie,' str (x) 'jest nieskończoną pętlą. To miłe, że pyton go łapie. – tdelaney

Odpowiedz

6

Numer ... wskazuje, że lista zawiera pętlę rekurencyjną, tj. Na pewnym poziomie coś zawiera się samo. To dlatego, że rozszerzyłeś x o x, więc zasadniczo włożyłeś w siebie x.

W drugim przykładzie nie ma ..., ponieważ y jest odrębnym obiektem. Chociaż zdarza się, że jest równy do x[0] w tym, że obie są pustymi listami, nie są one tą samą pustą listą.

+0

Więc rozszerzając 'x [0]' o 'x', tworząc odwołanie do' x' w 'x [0]', zamiast kopiować dane, które 'x' zawiera' x [0] '? czy to prawda? – CGA1123

+1

@ CGA1123: Zasadniczo tak. (Dokładniej, tworzy on odwołanie do 'x [0]' wewnątrz listy w 'x [0]', ponieważ 'extend' dodaje zawartość swojego argumentu, a nie samego argumentu. Ale masz rację, że jest tworzenie odniesienia do tego samego obiektu, a nie kopiowanie danych, i to jest klucz.) – BrenBarn

+0

Ach dobrze, dzięki! – CGA1123

Powiązane problemy