不可变对象
python吧
全部回复
仅看楼主
吧务
level 12
初学一般都会踩的坑,尤其是有其它语言经验的
a = 1#这里变量a只是1这个对象的一个引用
不管是赋值“a = 2”还是原地修改“a += 1”都不是修改1这个对象,仅仅是变量a重新绑定其它对象了,1还是1,因为这是不可变对象
水帖而已。。。
2023年09月26日 08点09分 1
level 6
如果按照你的理论的话, a = [1], a=[2], 仅仅是变量a重新绑定其它对象, [1] 还是[1], 因为这是不可变对象, 明显就有问题了
前期你这么记倒不是不行, 但是后面涉及到复杂概念的时候, 你可能就会混乱了.
变量, 这里比如说是a, 他只是对象的外在名字而已(后面namespace 概念里会提及), 你看a 和其他地方的a 是不是一样, 只需要看 a 的id 就可以, id(a), 这个id 就是变量的身份证.
a = 1, a=2, a+=1 这几个步骤后, 你查看 id(a) 都是不一样的, 也就是说a 直接被修改了, 是a被赋予了其他对象, 并不能说明 1 , 2 是不可变的.
你分别对比以下的变量id, 就能明白了可变和不可变了
a=1
b=1
--------
a="a"
b="a"
-------
a=[1]
b=[1]
-------
a = [1]
a.append(2)
a[1]=3
-----
分别查看每次赋值之后的id, 就心里有数了
2023年09月26日 12点09分 2
id查的是对象的地址不是“变量”的。在python里变量名只是其引用的对象的一个引用,也就是说它只是别名,没有实际性存在的一个东西。
2023年09月26日 13点09分
倒也是可以这么理解, 但不建议这么理解, 后面的namespace, local nonlocal, global 如果基于这个理解的话, 会比较麻烦一些
2023年09月27日 08点09分
level 1
看见重新绑定.但是还是没多大感觉
2023年09月26日 13点09分 3
level 1
我没怎么接触过按照 id搜了下指的是内存地址 内存地址确实不同 也就是重新赋值.它不会在原来地方修改.只是把a绑定到其它地方?至于这个理解还有什么作用没遇到过
2023年09月26日 13点09分 4
1