Wpis z mikrobloga

collection = [1, 2, 3, 4, 5]

for element in collection:
element = None
print(element)

print(collection)

ten print z petli bedzie oczywiscie zwracal none none none... ale ten ostatni poza petla wypisze 1,2,3,4,5 czyli sama lista zostala nie ruszona, czyli kopia, a nie referencja? Chyba, ze czegos nie rozumiem?

Bo element jest tylko w scope'ie funkcji, jabym zrobil:

collection = [1, 2, 3, 4, 5]

for element in collection:
collection = None
@erwit: On nic nie modyfikuje, ani nic nie zwraca. Trudno mi wyobrazić sobie sytuację, gdzie to byłoby zamierzone.

@xaoc: element to jest referencja. Ale element = None nie zmodyfikuje wskazywanego obiektu, tylko zmodyfikuje zmienną element, by wskazywała na wartość None.
@erwit: Nie robisz w tym kodzie nic tylko przysłaniasz zmienną element. Jest to po prostu bez sensu i tyle :)

Jakby tam był dalszy kod który spodziewa się, że element to jest faktyczna wartość z kolekcji, to nie będzie działać. Więc jak najbardziej takiej konstrukcji nie należy stosować.
@Almagest: No to słowo referencja chyba jest tu nieodpowiednie. Chyba że referencja w pythonie różni się od referencji w C++?

Ja bym w takim razie powiedział, że jest to wskaźnik. I wtedy by to miało dla mnie sens.
@xaoc: Tak, referencje w Pythonie różnią się od referencji i wskaźników w C++ i nie ma tu takiego pojęcia jak wskaźnik. Jeżeli przechodzisz z C++ to myśl o nich jak o wskaźnikach, których nie możesz do woli modyfikować np. dodając 1.
@erwit: Jako, że to jest pierwsze pytanie, to zakładam, że tylko o to, że kod nie ma efektu, jakiego ktoś mógłby się spodziewać.
Tylko, że to pytanie odsyła do kursu dla początkujących (jak się nie zna odpowiedzi) a totalnie początkujący po prostu tego nie zrozumie w ogóle. Natomiast ludzie, którzy przychodzą z innych języków muszą ogarnąć specyficzne rzeczy - w tym pytaniu mogą się zachować podobnie jak Ty.
Czyli raczej bym