2015-02-09 3 views
-2
sentence = "Hello" 
print sentence 
print sentence[:] 

И выводит то же самое, т.е. HelloКогда и почему нужно использовать [:] в Python

Таким образом, когда и почему использовать/не использовать [:]?

Спасибо! :)

+4

Получить информацию об этом здесь: http://stackoverflow.com/questions/509211/explain-pythons-slice-notation – Nobi

+0

Усилия с вашей стороны, похоже, вы даже не исследовали, что это делает. –

+0

@UlrichEckhardt Мне очень жаль ... но это мой первый пост в stackoverflow ... и я не знаю, что это называется нотной меткой, у меня была проблема поиска [:] в поиске Google. :) –

ответ

0

Причина, по которой вы получаете Hello как output, не передаете ли вы какой-либо параметр.

L[start:stop:step] 

Здесь L - ваша переменная, которая содержит Hello. и start означает начальную позицию строки и стоп-средство, где вы хотите закончить свою строку с помощью шага &, означает, сколько символов вы хотите пропустить.

Для получения дополнительной информации по этой теме, посетите this

См, если это ваша проблема решена.

2

Как указал 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 

Идентичность то же самое, что означает, что оба являются одним и тем же точным объектом.

0
>>> a = [1, 2, 3] 
>>> b=a[:] 
>>> id(b) 
4387312200 
>>> id(a) 
4387379464 

Если вы хотите сделать глубокую копию массива.

>>> a='123' 
>>> b=a[:] 
>>> id(a) 
4387372528 
>>> id(b) 
4387372528 

Но поскольку строка неизменна, строка [:] не имеет разницы с самой строкой.

P.S. Я вижу, что большинство людей, отвечающих на этот вопрос, не понимали, в чем вопрос вообще.

+1

Это делает * мелкую * копию списка, а не глубокую копию. Вы можете подтвердить это, заметив, что 'a = [[]]'; b = a [:]; a [0] - b [0] 'дает True. Чтобы сделать истинную глубокую копию, используйте 'copy.deepcopy' (https://docs.python.org/3.4/library/copy.html#copy.deepcopy). – lvc

+1

... нет, нет. 'a = []; b = []; a is b' является ложным.И наоборот, вы можете поместить все, что хотите во внутренний список, и получить тот же результат - 'mylist [:]' does * not * сделать копии любого из объектов в списке. Попробуйте 'a = [['a', 'b', 'c', 'd']]; b = a [:]; print (a [0] - b [0]); а [0] .append ('е'); Печать (б [0]) '. – lvc

Смежные вопросы