Indeed it calls __getitem___. But list() uses __getitem__ with more indexes than expected.
In my first example the __len__ returns 500. I’d expect list() to call __getitem__ 500 times. But it calls it 1000 times.