我的理解是Python字符串是不可变的.
我尝试了以下代码:
a = "Dog"
b = "eats"
c = "treats"
print a, b, c
# Dog eats treats
print a + " " + b + " " + c
# Dog eats treats
print a
# Dog
a = a + " " + b + " " + c
print a
# Dog eats treats
# !!!
Run Code Online (Sandbox Code Playgroud)
Python不应该阻止这项任务吗?我可能错过了一些东西.
任何的想法?
我在python中做了一些事情(使用python 3.3.3),我遇到了令我困惑的事情,因为我的理解课每次被调用时都会得到一个新的id.
让我们说你在一些.py文件中有这个:
class someClass: pass
print(someClass())
print(someClass())
Run Code Online (Sandbox Code Playgroud)
以上返回相同的id,这让我感到困惑,因为我正在调用它所以它不应该是相同的,对吧?当连续两次调用同一个类时,python是如何工作的?当我等待几秒钟时,它给出了不同的id,但是如果我像上面的例子一样,它似乎不会那样工作,这让我感到困惑.
>>> print(someClass());print(someClass())
<__main__.someClass object at 0x0000000002D96F98>
<__main__.someClass object at 0x0000000002D96F98>
Run Code Online (Sandbox Code Playgroud)
它返回相同的东西,但为什么呢?我也注意到范围,例如
for i in range(10):
print(someClass())
Run Code Online (Sandbox Code Playgroud)
当快速调用类时,python是否有任何特殊原因?我甚至不知道python是这样做的,还是可能是一个bug?如果它不是一个bug,有人可以向我解释如何修复它或一个方法,以便每次调用方法/类时它生成一个不同的id?我很困惑这是怎么做的,因为如果我等了,它确实会改变,但如果我尝试两次或更多次调用同一个类则不会.
我试图理解不变性在python中是如何工作的.因为字符串在python中是不可变的,所以我希望每次执行字符串操作时都会更改id,但它不能按预期工作.示例:t上的最后一个操作不会更改其ID.有什么想法吗?

我正在使用 Python 3.8.3 & 在检查字符串的 id 时,我得到了一些意外的输出,如下所示。
>>> a="d"
>>> id(a)
1984988052656
>>> a+="e"
>>> id(a)
1985027888368
>>> a+="h"
>>> id(a)
1985027888368
>>> a+="i"
>>> id(a)
1985027888368
>>>
Run Code Online (Sandbox Code Playgroud)
在将 "h" 添加到 a 的行之后,id(a) 没有改变。当字符串不可变时,这怎么可能?当我使用 a=a+"h" 而不是 a+="h" 并在 .py 文件中运行此代码时,我得到了相同的输出(我提到了这一点,因为在某些情况下我们可以在 shell 中运行时看到不同的输出并在保存到文件后运行相同的代码)
python ×4
immutability ×3
string ×2
class ×1
mutability ×1
python-2.7 ×1
python-3.8 ×1
python-3.x ×1