Почему оператор присваивания в цикле выполняется только один раз в python

Я думаю, что это отличается от моих привычек языка Си. Я хочу выполнять оператор присваивания каждый раз, так как это сделать?

Вход

a = [0,1,2,3,4,5]
for i in range(6):
    b = a
    print(len(b))
    c = b.pop(i)

выход

6
5
4
3
Exception has occurred: IndexError
pop index out of range

Кажется, что b = a только один раз.

ответ, который я хочу получить:

6
6
6
6
6
6

Я не хочу менять b длину.

Я удаляю import numpy as np.

Zhengfang Xin 07.04.2019 05:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Во-первых, вы не используете numpy, поэтому его не нужно импортировать.

Во-вторых, то, что вы считаете «присваиванием», на самом деле не существует в Python. Скорее, вы привязываете имяb к значению, к которому также привязан a. С практической точки зрения, нет никакой разницы между вашим кодом и этим:

a = [0,1,2,3,4,5]
for i in range(6):
    print(len(a))
    c = a.pop(i)

Если вам нужна копия, вам нужно явно создать ее:

a = [0,1,2,3,4,5]
for i in range(6):
    b = a[:]  # or b = a.copy()
    print(len(b))
    c = b.pop(i)

Выход:

6
6
6
6
6
6

a и b не разные объекты, это просто разные названия одного и того же объекта. Когда вы говорите b.pop(i), вы изменяете один объект, на который указывают и a, и b, поэтому выполнение b=a ничего не делает после первой итерации; b уже указывает на тот же объект, что и a. То, что вы хотите сделать, можно сделать, делая b=a.copy().

Другие вопросы по теме