sentence = "Hello"
print sentence
print sentence[:]
И выводит то же самое, т.е. Hello
Когда и почему нужно использовать [:] в Python
Таким образом, когда и почему использовать/не использовать [:]
?
Спасибо! :)
sentence = "Hello"
print sentence
print sentence[:]
И выводит то же самое, т.е. Hello
Когда и почему нужно использовать [:] в Python
Таким образом, когда и почему использовать/не использовать [:]
?
Спасибо! :)
Причина, по которой вы получаете Hello как output, не передаете ли вы какой-либо параметр.
L[start:stop:step]
Здесь L - ваша переменная, которая содержит Hello. и start означает начальную позицию строки и стоп-средство, где вы хотите закончить свою строку с помощью шага &, означает, сколько символов вы хотите пропустить.
Для получения дополнительной информации по этой теме, посетите this
См, если это ваша проблема решена.
Как указал Nobi, в нем уже есть question regarding Python's slicing notation. Как указано в ответе на этот вопрос, нарезка без начального и конечного значений ([:]
) в основном создает копию исходной последовательности.
Однако вы попали в специальный чехол со строками. Поскольку строки неизменяемы, нет смысла создавать копию строки. Поскольку вы не сможете изменять какой-либо экземпляр строки, нет необходимости иметь больше одного в памяти. Итак, в основном, с s[:]
(будучи s
строкой) вы не создаете копию строки; этот оператор возвращает ту же строку, на которую ссылается s
. Простой способ, чтобы увидеть это с помощью функции id()
(идентификатор объекта):
>>> l1 = [1, 2, 3]
>>> l2 = l1[:]
>>> id(l1)
3075103852L
>>> id(l2)
3072580172L
тождества различны. Однако со строками:
>>> s1 = "Hello"
>>> s2 = s1[:]
>>> id(s1)
3072585984L
>>> id(s2)
3072585984L
Идентичность то же самое, что означает, что оба являются одним и тем же точным объектом.
>>> a = [1, 2, 3]
>>> b=a[:]
>>> id(b)
4387312200
>>> id(a)
4387379464
Если вы хотите сделать глубокую копию массива.
>>> a='123'
>>> b=a[:]
>>> id(a)
4387372528
>>> id(b)
4387372528
Но поскольку строка неизменна, строка [:] не имеет разницы с самой строкой.
P.S. Я вижу, что большинство людей, отвечающих на этот вопрос, не понимали, в чем вопрос вообще.
Это делает * мелкую * копию списка, а не глубокую копию. Вы можете подтвердить это, заметив, что 'a = [[]]'; b = a [:]; a [0] - b [0] 'дает True. Чтобы сделать истинную глубокую копию, используйте 'copy.deepcopy' (https://docs.python.org/3.4/library/copy.html#copy.deepcopy). – lvc
... нет, нет. 'a = []; b = []; a is b' является ложным.И наоборот, вы можете поместить все, что хотите во внутренний список, и получить тот же результат - 'mylist [:]' does * not * сделать копии любого из объектов в списке. Попробуйте 'a = [['a', 'b', 'c', 'd']]; b = a [:]; print (a [0] - b [0]); а [0] .append ('е'); Печать (б [0]) '. – lvc
Получить информацию об этом здесь: http://stackoverflow.com/questions/509211/explain-pythons-slice-notation – Nobi
Усилия с вашей стороны, похоже, вы даже не исследовали, что это делает. –
@UlrichEckhardt Мне очень жаль ... но это мой первый пост в stackoverflow ... и я не знаю, что это называется нотной меткой, у меня была проблема поиска [:] в поиске Google. :) –