在Python中数值和字符串对象是不可以改变的,但对于新手的我们很难理解,于是乎会有下面的代码:

x = 'Hello World'
print x
x = 'Hello Hello'
print x

上面的代码明显的说明了变量x是可以改变的。其实变量x的改变伴随着x内存地址的变化,也就是说系统重新创建了一个名为x的变量用于保存新字符串。想要证明这个需要用到Python的id函数。

id函数返回一个数字,这个数字跟该对象的分配内存地址密切相关。也可以近似认为这个数值就是该对象(变量)的所在内存地址。

python中id函数的说明 Help on built-in function id in module builtin:

id(...) id(object) -> integer

Return the identity of an object. This is guaranteed to be unique among simultaneously existing objects. (Hint: it's the object's memory address.)

现在再来看下面的代码:

x = 'Hello World'
print id(x)
x = 'Hello Hello'
print id(x)
y = ['a', 'b']
print id(y)
y.append('c')
print id(y)

你运行结果如下:

21908576 21906752 23032176 23032176

可以看出前两个id的结果并不相同,而后面的两个(python中列表、字典对象是可变的)结果却是一样的,这说明字符串对象在python中是不可变的,即使重新对变量赋值,也只是重新生成相同变量的字符串而并不是直接改变当前的字符串变量。