В обоих случаях вы получите список a
, являющийся копией списка b
. Но метод, используемый для достижения этой цели, изменился.
a[:] = b
изменяет список a
, чтобы он содержал те же элементы, что и b
a = b[:]
создает новый список, который является копией b
и заменяет список a
Разница в том, изменили ли мы существующий список или создали новый.
Чтобы увидеть разницу:
a = range(3)
b = range(4)
c = a # c and a now share the same list
a[:] = b
print "a", a
print "b", b
print "C", c
Все три списка будут распечатаны одинаково. C и совместно используют один и тот же объект, поэтому, когда a
был изменен, изменился и c
a = range(3)
b = range(4)
c = a # c and a now share the same list
a = b[:]
print "a", a
print "b", b
print "C", c
Теперь c не будет печатать так же, как a. После назначения a
и c
не использовали один и тот же объект.
Скорость, a[:] = b' is probably a little faster then
a = b [:] `. Первая форма не должна создавать новый объект списка, она может просто изменить существующий список. Большая часть этого заключается в том, что он может повторно использовать память, уже принадлежащую списку, а не выделять новую память.