考虑下面的代码。它的输出是:
1 385712698864 385712698864
2 385744287024
3 385744287088
4 385712698864
5 385744286960
6 385744286960
7 385744286960
8 385712698864
这意味着以下代码中的一些操作会更改id,但有些操作不会,即使没有任何操作更改变量a
的值:
- 将变量设置为值
"a"
始终导致相同的id(在特定运行中,该id为385712698864
) - 调用
a.lower()
后,每次更改a
的id a[::-1]
更改ida[:1]
不会更改idg(a)
不会更改idf(a)
更改id
可以有人解释一下这种看似不一致的行为吗?(我使用的是python 3.8)
代码如下:
def f(x):
y = x + x
n = len(x)
return y[:n]
def g(x):
return "" + x
a = "a"
b = "a"
print(1, id(a), id(b))
a = a.lower()
print(2, id(a))
a = a.lower()
print(3, id(a))
a = "a"
print(4, id(a))
a = a[::-1]
print(5, id(a))
a = a[:1]
print(6, id(a))
a = g(a)
print(7, id(a))
a = f(a)
print(8, id(a))