W Pythonie jest "duck typing"[0], czyli jeśli jakaś metoda jest zdefiniowana na różnych obiektach, to możemy ją zawołać i będą one [te obiekty] zachowywać się podobnie (nie mamy sztywnego systemu typów, odsyłam do wikipedii). Obiekty do których można się odwoływać za pomocą indeksowania O[i]
musza mieć zdefiniowaną metodę __setitem__
, (jest to jedna z tak zwanych "magic methods"[1]) dla listy jest nadpisana w ten sposób, że ustawia element o danym indeksie listy, a w przypadku słownika, tworzy dodatkową parę klucz wartość.
>>> d = dict()
>>> d[9] = "nine"
>>> d
{9: 'nine'}
>>> d.__setitem__(0, "zero")
>>> d
{9: 'nine', 0: 'zero'}
>>> l = [1, 2 ,3]
>>> l
[1, 2, 3]
>>> l[0] = 0
>>> l
[0, 2, 3]
>>> l.__setitem__(0, -1)
>>> l
[-1, 2, 3]
>>> l.append(4)
>>> l
[-1, 2, 3, 4]
Wspomniane przez Ciebie append
, to jeszcze co innego, dodaje element do końca listy.
[0] https://en.wikipedia.org/wiki/Duck_typing
[1] https://rszalski.github.io/magicmethods/