Что происходит на самом деле, когда мы вызываем __getitem__ в python?
Потому что python list это не связный список, а вектор.PyObject *
PyList_GetItem(PyObject *op, Py_ssize_t i)
{
    // Some code
    return ((PyListObject *)op) -> ob_item[i];
}
list и tuple хранят не объекты, а адреса объектов.>>> a = [1, 2, 3]
>>> 
>>> tup = (a, a, a)
>>> 
>>> tup
([1, 2, 3], [1, 2, 3], [1, 2, 3])
>>> 
>>> a[0] = 10
>>> 
>>> tup
([10, 2, 3], [10, 2, 3], [10, 2, 3])
>>>