在Python中,String是不可变的,那么为什么在Python中允许覆盖操作?

时间:2017-06-27 14:46:42

标签: python python-3.x

在Python中,String是不可变的,那么为什么在Python中允许以下操作?

a = 'Hello'
a = 'Hi'

2 个答案:

答案 0 :(得分:3)

因为a是字符串的引用/句柄(如果您愿意,类似于指针),而不是字符串。您甚至可以检查内存地址以确保。

>>> a = "hello"
>>> id(a)
140102378280544 # memory address (not exactly but that's irrelevant to the topic)
>>> a = 'hii'
140102388086864 # different memory address than before

Python中的字符串是不可变的,因为它只存储在一个地方(大部分),因此无法进行变异。

 >>> a = 'country'
 >>> b = 'country'
 >>> id(a) == id(b)
 True
 >>> a is b
 True

答案 1 :(得分:1)

>>> a = 'Hello'
>>> id(a)
4519028800
>>> a = 'Hi'
>>> id(a)
4519896088

不是同一个变量......虽然我必须说id的值只是最好的指示。

当您尝试将文字重新分配给a时,您不会更改字符串。字符串保持不变。 a指向的引用有哪些变化。