变量是什么?
抛开云山雾罩的官腔,变量的本质是什么?
- 一块或多块用于存储可变数据的内存。
- 确切的类型决定了内存长度和数据存储格式。
- 用于引用该内存的符号名。
通过
unsafe
包提供的指针运算,可以将多个变量指向同一块内存,比如整数可以当做字节序列读出来,但这并不能改变原变量的类型。
变量本身的确是一个相对来说比较抽象的概念,变量首先要引用一块内存,需要存储数据并且可修改数据,那这块内存需要可读可写。
可能不是一块内存而是多块内存,例如基本类型整数是一块内存,引用类型切片哈希可能是多块内存构成的。
内存地址可能不是固定的,例如切片的底层数组、哈希表在扩容的时候可能都会重新分配内存。
C 语言、Go 语言某一块内存可能是固定的,但是 Python 语言一个变量涉及到很多东西,名字是独立的字符串对象。目标对象、名字空间共同构成一个变量。
所以一块或多块用于存储可变数据的内存。
第二变量必须有确切的类型,Go 和 Python 是强类型语言,C 是弱类型的语言。所谓强类型的语言不能把一个变量隐式的转化另外一种类型来使用。C语言是弱类型可以把整数当成浮点型来使用。
通过类型决定需要多长的内存,例如 64 位整数是 8 字节 32 位整数是 4 字节。同时涉及到大小端的问题,例如字节怎么排列的。类型决定了内存长度和数据存储格式,很显然整数和其他类型存储肯定是不一样的。
因为变量的内存是运行期的,我们写代码的时候不知道,所以必须有个符号名字来指代这块内存而不是指代这块内存地址。x = 1
指x
指代这块内存不是说x</