何时以及为何在python中使用[:]

Des*_*eoh 0 python syntax

sentence = "Hello"
print sentence
print sentence[:]
Run Code Online (Sandbox Code Playgroud)

两者输出相同的东西,即 Hello

那么,何时以及为何使用/不使用[:]

谢谢!:)

Pab*_*nio 5

正如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)

身份是相同的,意味着两者是完全相同的对象.