Я думаю, что это отличается от моих привычек языка Си. Я хочу выполнять оператор присваивания каждый раз, так как это сделать?
Вход
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
длину.
Во-первых, вы не используете 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()
.
Я удаляю
import numpy as np
.