p = [1,2,3]
print(p) # [1, 2, 3]
q=p[:] # supposed to do a shallow copy
q[0]=11
print(q) #[11, 2, 3]
print(p) #[1, 2, 3]
# above confirms that q is not p, and is a distinct copy
del p[:] # why is this not creating a copy and deleting that copy ?
print(p) # []
Выше подтверждает, что p[:]
не работает одинаково в этих двух ситуациях. Не так ли?
Учитывая, что в следующем коде я ожидаю работать непосредственно с p
а не с копией p
,
p[0] = 111
p[1:3] = [222, 333]
print(p) # [111, 222, 333]
я чувствую
del p[:]
согласуется с p[:]
, все они ссылаются на исходный список, но
q=p[:]
сбивает с толку (для новичков, как я), так как p[:]
в этом случае приводит к новому списку!
Мое ожидание новичка было бы то, что
q=p[:]
должен быть таким же, как
q=p
Почему создатели позволили этому особому поведению создать копию?