sentence = "Hello"
print sentence
print sentence[:]
兩個輸出同樣的事情,即Hello
何時以及爲什麼要使用[:]在Python
所以,當以及爲什麼使用/不使用[:]
?
謝謝! :)
sentence = "Hello"
print sentence
print sentence[:]
兩個輸出同樣的事情,即Hello
何時以及爲什麼要使用[:]在Python
所以,當以及爲什麼使用/不使用[:]
?
謝謝! :)
你的理由爲什麼你作爲輸出得到你好,你是沒有傳遞任何參數。
L[start:stop:step]
這裏L是你的變量,它包含Hello。 start表示字符串的起始位置,stop表示要結束字符串的位置,& step表示要跳過的字符數。
有關此主題的更多信息,請訪問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
但由於字符串是不可變的,因此string [:]與字符串本身沒有區別。
P.S.我看到大部分回答這個問題的人都不明白這個問題是什麼。
這使得一個*淺*副本的列表,而不是一個深層複製。你可以通過注意到'a = [[]]'; b = a [:]; a [0]是b [0]'給出True。要執行真正的深層複製,請使用'copy.deepcopy'](https://docs.python.org/3.4/library/copy.html#copy.deepcopy)。 – lvc 2015-02-09 07:22:59
...不,不,他們沒有。 'a = []; b = []; a是b'是假的。相反,你可以把你想要的任何東西放到內部列表中,並得到相同的結果 - 「mylist [:]'不會*製作列表中任何對象的副本。嘗試'a = [['a','b','c','d']]; b = a [:];打印(a [0]是b [0]);一個[0] .append( 'E');打印(B [0])'。 – lvc 2015-02-09 07:37:19
在這裏獲取有關信息:http://stackoverflow.com/questions/509211/explain-pythons-slice-notation – Nobi 2015-02-09 06:59:11
從你身邊努力,似乎你甚至沒有研究這是什麼。 – 2015-02-09 07:18:21
@UlrichEckhardt我真的很抱歉...但這是我在stackoverflow中的第一篇文章...我不知道它叫做切片符號,我在Google搜索中搜索[:]時遇到問題。 :) – 2015-02-09 14:47:58