Po prostu pomyślałem, że zanotuję to teraz, gdy już to widziałem - dobrze byłoby uzyskać potwierdzenie tego zachowania; Widziałem How do I pass a variable by reference?, ale nie jestem pewien, jak interpretować go w tym kontekście.Przechowywanie elementów z jednej listy, na innej liście - przez odniesienie - w języku Python?
Powiedzmy mamy te dwie tablice/list:
a = [1, 2, 3, 4]
b = [-1, a, -100, a[2], -1]
Interpreter początkowo widzi je jako:
>>> print(a)
[1, 2, 3, 4]
>>> print(b)
[-1, [1, 2, 3, 4], -100, 3, -1]
Teraz zmieńmy a[2]
i zobaczyć, co się dzieje:
>>> print(a)
[1, 2, 55, 4]
>>> print(b)
[-1, [1, 2, 55, 4], -100, 3, -1]
Gdziekolwiek lista b
ma odniesienie do listaa
wartość została zaktualizowana - ale gdziekolwiek b
została zainicjowana (odniesienie do?) Element od listy a
, wydaje się, że Python rozszerzony wartość w czasie inicjalizacji, a zatem przechowywany element o wartość (nie przez odniesienie), więc jego wartość oczywiście nie aktualizuje się.
Zasadniczo znalazłem przypadek użycia, w którym wygodnie byłoby określić np. b = [-1 a[2] -1]
, a następnie zaktualizować a[2]
i być w stanie policzyć, że najnowsza wartość a[2]
zostanie wyemitowana podczas pobierania wartości (w tym przypadku) b[1]
. Czy istnieje sposób, aby to zrobić w Pythonie, bez konieczności wykonywania b = [-1 a -1]
, a następnie czytanie b[1][2]
(Chciałbym uzyskać wartość a[2]
tylko za pomocą b[1]
)?