变量
和C的变量完全不同,C变量修改值地址是不会变的,即重写了该变量名对应地址的存储单元内的数据值。Python中出现x=10,意味着引用x指向了10(所以引用是啥)
实际上我也不清楚这里所谓引用的实现到底是什么,只知道x指向了存放10的存储单元。然后,id(x)可以查看到具体地址。
关于可变数据类型和不可变数据类型
我个人的理解是,可变数据类型的对象往往会以其他对象的引用作为值的一部分。
我们假设有个可变类型对象的引用A,它以某对象引用x为部分值。修改x对象的值(whatever,x的指向改变or不改变都可),那么A对象的值发生了改变,但是,A并没有改变指向,改变指向的应该是x(or x的值中的引用)
以List为例
看最后RESTART分割线下的部分,A[0]=10前后A引用指向未变,但是A[0]指向变了。
不可变呢?
不以其他对象引用为值的一部分,比如数字,字符串(Python里面的字符串又和C,C++不一样了orz据说Python没有区别于字符串的字符概念,所以无法利用索引啥的去调用字符串中的单个字符)
还有就是不可修改值的类型,比如Tuple。因为Tuple和List一样存储的是引用,而Tuple不允许修改值,所以想要得到一个不一样的引用(?)只能修改指向了。
从声明了B的地方看起。
B是(1,2,3),但我想让B为(10,2,3)
尝试修改B[0]=10,惨遭无情报错。
行吧,我就令B指向一个新Tuple(10,2,3)
前后id(B)改变。
To sum up
差不多就是这样。学校网课连概论还没讲完,现在就去追究这些东西真滴太累了orz
不过蛮好玩的哈哈哈哈哈
有什么不对的地方欢迎指出,大家愉快讨论学习哈!