zvz*_*919 4 python memory string
我正在尝试在 python 中进行字符串切片,这是我的代码:
s = 'a string'
print(id(s[3:]), id(s[5:]))
print(id(s[3:])==id(s[5:]))
print(s[3:] is s[5:])
print(s[3:] is s[3:])
Run Code Online (Sandbox Code Playgroud)
该代码产生了以下结果:
4396519216 4396519216
True
False
False
Run Code Online (Sandbox Code Playgroud)
我的问题是这些字符串切片如何存储在内存中,为什么字符串的不同切片具有相同的 id,并且具有相同的 id,为什么在使用 'is' 关键字进行比较时会产生 'False'?
因为在调用 之后没有将切片保存在变量(或任何地方)中id,所以它们的生命周期实际上是不重叠的,因此id可以重用。
fromid()的文档:
返回对象的“身份”。这是一个整数,保证在此对象的生命周期内是唯一且恒定的。生命周期不重叠的两个对象可能具有相同的 id() 值。
请注意,因为is需要它们都存在,所以它们可能会获得不同的 ID,但是当您id单独调用每个ID 时,它可以在id返回后被破坏,并且比较本身是int在函数返回的结果上完成的。
如果你将它们保存到虚拟变量中,你会得到在我看来不那么令人惊讶的结果:
s = 'a string'
s3 = s[3:]
s5 = s[5:]
print(id(s3), id(s5))
print(id(s3)==id(s5))
print(s3 is s5)
print(s3 is s3)
Run Code Online (Sandbox Code Playgroud)
输出:
25517664 25517728
False
False
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |