Я хотел расширить список классов в python37 с помощью некоторых пользовательских методов.
и в итоге прочитал код UserList cpython . После прочтения возникли новые вопросы по поводу использования [:]
.
Если я правильно понимаю, `[:]` делает фрагментную копию всего
`Self.data`. Но я пытаюсь понять, какой смысл использовать `[:]`
в левой части оператора `=`.
Есть ли разница между первым и вторым вариантом? Попробовал в питоне
переводчик, и оба, кажется, имеют одинаковый эффект, я скучаю
что-то?
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
# option (1)
letters[:] = []
# option (2)
letters = []
Теперь мои вопросы касаются кода UserList. Я добавил комментарии с вопросами, которые у меня есть.
class UserList(_collections_abc.MutableSequence):
def __init__(self, initlist=None):
self.data = []
if initlist is not None:
if type(initlist) == type(self.data):
# NOTE: Is this if statement doing the same?
# if isinstance(initlist, list):
self.data[:] = initlist
# NOTE: wouldn't in this case self.data keep a reference to initlist
# instead of a copy?
# self.data[:] = initlist[:] # could one replace that line with this one?
elif isinstance(initlist, UserList):
self.data[:] = initlist.data[:]
# NOTE: would this line accomplish the same?
# self.data = initlist.data[:]
else:
self.data = list(initlist)
...