说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在编程理论中,有变量这个东西,一般来说大多语言真正实现了变量的定义,即将变量设计为一个容器用来存放具体结构可变化的数据值,但 Python 相对来说比较特殊,没有按「传统」定义去这么实现,通过这篇整理的摘录,让我们理解它的原理和不同,让你理解为何 Python 这么灵活易用。
对于变量,在数学中我们已经了解过,就是一个值可能会改变的量。在C++中,我们对变量的认识应该相当于一个标识符,创建一个变量,即开辟一块内存然后给这块内存起个名字,那么这个名字就是“变量”,当然,这个变量的含义和内存地址以及指针都是不相同的。
那么在Python中,变量意味着什么呢?按照我的理解,一言蔽之,就是一个指针。这确实和之前学过的强类型语言是有不同的。为什么这么说呢?首先,python中的变量是没有类型的,有类型的是“对象”,而不是变量。变量没有类型,那么就意味着它可以随意指向任何对象。在强类型语言中,变量其实都是有具体的类型来限制的,规定一个类型的变量只能被赋值与该类型相同或兼容的值。但是在python中,显然变量的自由度更大。其次,之前学过体系结构的同学都应该了解,指针的内存空间大小是与类型无关的,其内存空间只是保存了所指向数据的内存地址。之所以说指针也有类型,是因为在计算偏移量的时候,确实需要类型相关的信息。所以,从深层次的含以上来理解,python中的变量与强类型语言中的指针非常相似。(知乎:要没时间了)
不要求完全精确的情况下,Python 其实可以说是“没有变量”,有的只是“名字绑定”,每一个名字可以视为一个实例(instance)的引用,变量只是大家沿用了更熟悉的概念而已。也就是说,a = 20
这句代码里,a
只是一个名字(引用)。
个人看法:这个问题需要在C的层面上解释。Python中变量本质上是指针,x=1,即开辟一块内存A来存放整型数据1,x指向内存A;x='hello',即重新开辟一块内存B来存放字符串数据hello,x则改变指向,指向内存B。
使用type函数的时候,得到的是x所指内容的数据类型,而x本身存放的是地址,无论x指向的是什么数据,地址只是一个16进制数,并没有所谓的类型。
如果是其他编程语言,首先要定义的就是变量的类型,一种变量只能存储某种固定类型的数据。
python不需要定义变量的类型,所以可以用来存储任何类型的数据
看过一个比喻,感觉很贴切。python中的变量就好比一个标签,变量的复制就是把标签贴到对象身上。而C语言的变量就像是一个盒子,变量赋值就是把对象(数据)装入盒子中。
最近学python感觉python和C/C++里有些东西不一样,看到答主的答案后用idle试了一下果然是这样,,以前习惯C/C++对变量=内存的思路了,现在转过来还有点稍稍不习惯。
变量是我们学习编程时遇到的第一个概念,变量是存储数据的盒子,这是一个很常见的回答。但是当学过不只一种编程语言之后,这句话就不对了。下面就来谈谈 python 中的变量。
为了讲清楚 python 中的变量,需要与C语言做一个比较。
我们知道C 语言是属于静态类型语言,即在定义变量是必须声明变量类型。让我们看一个例子。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int number = 8;
printf("%x\n",&number);
number +=1;
printf("%x\n",&number);
return 0;
}
结果是:ox62fe4c,ox62fe4c,变量还是原来那个变量。
在让我们看一个python的例子。
def main():
number = 8
print(hex(id(number)))
number =+1
print(hex(id(number)))
if __name__ == "__main__":
main()
结果是:0x56776ec0,0x56776de0,显然number变量已经不是原来那个变量了。那么这其中原因什么呢?
python 是动态类型语言,变量名只是对对象的引用(或者是贴在对象的标签),在进行变量赋值时,python 会创建一个对象,然后变量名指向它。由于例子中创建了一个整数对象8,整数对象是不可变的,当执行+=操作时,python又重新创建了一个对象9,让number指向它,所以两次的结果是不一样的。字符串也是如此。
那么该如何理解python 中的变量呢?当我们看到赋值语句时,通常要这样理解:
a = 3
更新时间:2022-02-18 09:55:25 标签:python 标识符 变量 原理