python - 何时以及为何使用 [:] in python

标签 python syntax

sentence = "Hello"
print sentence
print sentence[:]

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

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

谢谢! :)

最佳答案

作为 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

身份相同,意味着两者都是同一个确切的对象。

关于python - 何时以及为何使用 [:] in python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28404340/

相关文章:

Python Pandas - 即使数据帧中存在相同的列,pd.merge 上也会出现 KeyError

python - 正则表达式在逗号之间选择和替换字符串不包括预期的逗号

c++ - 除了使 TMP 编译之外,::template 意味着什么

c - respawn :1 mean in c? 是什么意思

c++ - xcode 关键字语法着色,不识别 c++ std::string

许多文件中的 python GTK+ 操作

python - 我如何在 celery 中指定 SQS 队列名称

php - pdo 准备好的声明不起作用

Java HashMap 作为方法参数 - 未指定 "value"类型

python - 使用 1-24 小时而不是 0-23 小时解析日期时间