关于python中的赋值变量的问题

代码:
you='QH'
me=you
you='LJQ'
print you
print me
输出:
LJQ
QH

现在的问题是,让一个变量等于另一个变量时是让两个变量都指向同一个内存地址还是指向不同的?

是指向同一个内存地址的,python的赋值是只是把变量的内存地址赋值给另一个变量,这一点可以使用python的内建方法id()来进行测试,对于你给的例子:

我们假设'QH'这个字符串在内存中的地址是a,'LJQ'在内存中的地址是b

you='QH' #让you变量指向a地址
me=you #让me变量和you变量一样指向a地址
you='LJQ' #修改you变量,让它指向到b地址
print you #可想而知you指向的是b地址,所以它的值为'LJQ'
print me #me指向的是a地址,所以它的值为'QH'
输出:
LJQ
QH

可以使用ID来加强对python的赋值机制的理解

>>> a = 'asdf'
>>> id(a)
872552384
>>> b = a
>>> id(b)
872552384
>>> a = 'haha'
>>> id(a)
872552672
>>> id(b)
872552384
>>> a
'haha'
>>> b
'asdf'
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-23
指向同一个内存地址. 但是即使是这样说,实际上还是有两种不同的理解

python变量分两种 mutable immutable, 就是可变和不可变的意思

数字,字符串 tuple (就是“()”这种形式的数组), 这种数据类型是不可变的, 因此
你以上的程序的含义是 you 指向 'QH', me指向you指向的内容, 所以me 就指向了'QH', 然后 you指向'LJQ', 这里是you本身的值变了, 而不是you指向的对象的值变了。

you=[1]
me=you
you.append(2)
print you
print me
输出
[1, 2]
[1, 2]

这里, 你看到 you.append(2), 这其实是you指向的 [1]对象进行了append()操作,因此是该对象本身发生了变化([],{}以及其他大部分数据类型都是可变数据类型), 因此 me 和 you都指向同一个对象, 输出自然就是相同的。
第2个回答  2009-12-23
同一个地址,类似于ActionScript3, python中的字符串是不变对象,不允许对其中的字符按下标修改.当为某个字符串变量赋新的字符串值时,仅仅是更改这个变量指向的地址
相似回答