何时以及为什么在python中使用[:]
两个输出相同的内容,即何时以及为什么在python中使用[:],python,syntax,Python,Syntax,两个输出相同的内容,即Hello 那么,何时以及为什么使用/不使用[:] 谢谢!:) 将Hello作为输出的原因是没有传递任何参数 sentence = "Hello" print sentence print sentence[:] 这里是变量L,它包含Hello。开始表示字符串的初始位置,停止表示字符串结束的位置&step表示要跳过多少个字符 有关此主题的更多信息,请访问 请参阅,如果这解决了您的问题。正如评论中所指出的,已经有了一个解决方案。正如在对该问题的回答中所述,没有起始值和结束值
Hello
那么,何时以及为什么使用/不使用[:]
谢谢!:) 将Hello作为输出的原因是没有传递任何参数
sentence = "Hello"
print sentence
print sentence[:]
这里是变量L,它包含Hello。开始表示字符串的初始位置,停止表示字符串结束的位置&step表示要跳过多少个字符
有关此主题的更多信息,请访问
请参阅,如果这解决了您的问题。正如评论中所指出的,已经有了一个解决方案。正如在对该问题的回答中所述,没有起始值和结束值的切片([:]
)基本上创建了原始序列的副本
但是,您遇到了一个特殊情况。因为字符串是不可变的,所以创建字符串的副本毫无意义。由于无法修改字符串的任何实例,因此内存中不需要有多个实例。因此,基本上,使用s[:]
(作为s
字符串)并不是创建字符串的副本;该语句返回的字符串与s
引用的字符串完全相同。查看这一点的简单方法是使用id()
(对象标识)函数:
L[start:stop:step]
身份不同。但是,对于字符串:
>>> 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
但由于string是不可变的,string[:]与string本身没有区别
另外,我看到大多数回答这个问题的人根本不明白问题是什么。在这里获取相关信息:你方没有做出任何努力,似乎你甚至没有研究它的作用。@UlrichEckhardt我真的很抱歉。。。但这是我在stackoverflow的第一篇帖子。。。我不知道它叫切片符号,我在谷歌搜索中搜索[:]时遇到了问题这将创建列表的浅拷贝,而不是深拷贝。您可以通过注意
a=[[]]
来确认这一点;b=a[:];a[0]是b[0]`为真。要进行真正的深度复制,请使用copy.deepcopy
]()。。。。不,不,他们没有<代码>a=[];b=[];a为b为假。相反,您可以将任何需要的内容放入内部列表,并得到相同的结果-mylist[:]
不会复制列表中的任何对象。试试a=[['a','b','c','d'];b=a[:];打印(a[0]是b[0]);a[0]。追加('e');打印(b[0])
。
>>> a='123'
>>> b=a[:]
>>> id(a)
4387372528
>>> id(b)
4387372528