#python
#python
Вопрос:
Я понимаю, что список в Python находится под капотом в виде динамического массива указателей, но меня смущает, как обеспечивается изменчивость списка при передаче его в функцию.
samplelist = [4,"string",5,6]
def listAppend(list):
for i in range(10000):
list.append("6")
listAppend(samplelist)
и если я передаю список в функцию (передавая ссылку по значению) и добавляю элементы в список в цикле, пока не потребуется динамическое изменение размера под капотом, как Python гарантирует, что объект samplelist (id) остается таким же, как объект list (id), даже после динамического изменения размера внутри функциипосле повторных вызовов добавления? Это потому, что под капотом происходит то, что у вас есть головной указатель на массив указателей, и этот головной указатель изменяется на другое местоположение после изменения размера?
Комментарии:
1. «Я передаю список функции (которая по значению)» — нет, вы передаете ссылку на список.
2. Вы передаете ссылку по значению.
3. Да, если быть точным.
list2 = samplelist
это то же самое. Поэтому передача его в функцию на самом деле не имеет значения. В любом случае изменение размера списка не создает новый объект списка.4. В любом случае, да, объект list поддерживает указатель на память, которую он использует для хранения, который может быть обновлен при необходимости. Вот источник cpython: github.com/python/cpython/blob /…