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