На самом деле, это не ошибка дизайна, и это происходит не из-за внутренних компонентов, а из-за производительности. Это происходит просто из-за того, что функции в Python являются первоклассными объектами, а не только частью кода.
Как только вы додумаетесь до этого, тогда это полностью имеет смысл: функция - объект, оцениваемый по его определению; параметры по умолчанию являются «данными-членами», и поэтому их состояние может меняться от одного вызова к другому - точно так же, как и к любому другому объекту.
В любом случае Effbot имеет очень хорошее объяснение причин это поведение в Значения параметров по умолчанию в Python . Я нашел это очень ясным, и я действительно предлагаю прочитать его, чтобы лучше узнать, как работают объекты функций.
Более подходящим способом «R» может быть:
List_12 <- as.list(1:2)
for(i in 1:2){
for(j in 1:2){
List_12[[i]][[j]] <- i
}
}
Вы можете назвать свои списки в этой структуре:
names(List_12) <- paste0("List_",c(1,2))
Затем вы можете индексировать по имени:
[ 112]Мне не ясно, почему в каждом списке должны быть только нули. Однако присвоение элементов вставленным именам является головной болью в R. Вы должны использовать функцию assign и указать среду. Примерно так.
for(i in 1:2){
values <- list(1:i)
assign(x = paste0("List_", i), value = values, envir = globalenv())
}
List_1
[[1]]
[1] 1
List_2
[[1]]
[1] 1 2