Самостоятельный ссылочный список в Python?

1

Анализируя список python, я удивился, увидев что-то, что невозможно на другом языке программирования. Допустим, у меня есть список под названием my_list

my_list = [1,2,3,4,5,6,7,8,9,10] 

Затем, когда я делаю, как

my_list[9] = my_list  #I didn't seen such things possible in C/C++

И когда я my_list, my_list[9] и my_list[9][9], все это дает те же результаты.

my_list
[1, 2, 3, 4, 5, 6, 7, 8, 9, [...]]
my_list[9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, [...]]
my_list[9][9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, [...]]

Я понял, что my_list[9] ссылается на тот же список, my_list и my_list и [...] означает самореализованный список, т.е. список, указывающий на тот же список, что и при type(my_list[9]) он дает мне type как list.

[1, 2, 3, 4, 5, 6, 7, 8, 9, [...]]
                              |
             Does it like self referential struct pointer concept of C ?

Над примером my_list я просто добавил для простого тестового прогона. Я хочу знать, как такие вещи, как my_list[9] = my_list производительность кода python. каково фактическое намерение этого my_list[9] = my_list делает возможным в python?

Любая помощь будет оценена.

Теги:
language-lawyer

2 ответа

1
Лучший ответ

Это возможно, потому что список (как и другие контейнеры) хранит ссылки, а почему бы не ссылку на себя?

Функции __str__/__repr__ были защищены от этого, чтобы избежать бесконечной рекурсии, и вместо этого показывать многоточие (...).

Почему это возможно? Потому что это не невозможно. Если бы Python предотвратил это, это означало бы проверку на наличие собственных ссылок каждый раз, когда объект добавлялся в список. Это может быть либо дополнительная нагрузка O (n) для хранения эталонного кэша, либо дополнительная нагрузка O (n) для выполнения поиска эталона.

1

Списки в python не содержат ничего, кроме ссылок на объекты (например, указатель). Они могут ссылаться на любой объект, включая себя.

  • 0
    Спасибо за быстрый ответ. Таким образом, вы говорите, что list самом деле не содержит значений, он содержит ссылку на эти значения?
  • 0
    Python не имеет значений - в Python все ссылки - включая обычные переменные, атрибуты, параметры функции ...
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню