sentence = "Hello"
print sentence
print sentence[:]
Run Code Online (Sandbox Code Playgroud)
两者输出相同的东西,即 Hello
那么,何时以及为何使用/不使用[:]?
谢谢!:)
正如Nobi在评论中指出的那样,已经存在一个关于Python切片符号的问题.正如在该问题的答案中所述,没有开始和结束值([:])的切片基本上创建了原始序列的副本.
但是,你已经遇到了一个特殊情况下的字符串.由于字符串是不可变的,因此创建字符串副本是没有意义的.由于您将无法修改字符串的任何实例,因此内存中不需要多个实例.所以,基本上,用s[:](作为s一个字符串)你不是要创建字符串的副本; 该语句返回引用的相同字符串s.一种简单的方法是使用id()(对象标识)函数:
>>> l1 = [1, 2, 3]
>>> l2 = l1[:]
>>> id(l1)
3075103852L
>>> id(l2)
3072580172L
Run Code Online (Sandbox Code Playgroud)
身份是不同的.但是,使用字符串:
>>> s1 = "Hello"
>>> s2 = s1[:]
>>> id(s1)
3072585984L
>>> id(s2)
3072585984L
Run Code Online (Sandbox Code Playgroud)
身份是相同的,意味着两者是完全相同的对象.