在很多计算机语言中,有 int,float,string 等变量类型
# Java or C
int a=10; #定义一个整型变量a,并给其赋值为10
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int a; #定义一个整型变量a
a=10; #给变量a赋值为10
在这方面,python语言,与这些语言完全不同;在python中没有变量类型,只有对象类型
或者说python中所谓变量的概念,含义与其他语言不同,用"标识符"这个词来描述会更恰当一些
python中 整数、浮点数、字符串 都是对象,可以称为整型对象、浮点型对象、字符串对象
为方便地使用对象,要给该对象取一个名字来标识它,这个名字就是标识符
标识符 就像指针一样,可以指向任何的对象类型;而且可以随时指向另外一种不同类型的对象
我们可以这样认为,python中的"="是"引用/指向"的意思,与其他语言中的"赋值"不完全相同
动态类型 就是指标识符可以引用(指向)任何类型的对象,而自身却没有变量类型的概念
动态类型 自动跟踪对象的类型而不要求代码声明
因为python的标识符可以引用任何类型的对象(包括函数等),所以给予了python极大的灵活性
a=2 #整型对象2的标识符a
b=3.3 #浮点型对象3.3的标识符b
str='hello' #字符串对象'hello'的标识符str
bo=True
print(type(a),type(b),str.__class__,bo.__class__) #都是类的对象
#运行反馈
#也可这样描述
a引用整型对象2
b引用浮点型对象3.3
str引用字符串对象'hello'
b1引用布尔对象True
特别注意的是,python沿用了其他语言中变量的提法,例如全局变量、本地变量等
但是我们要清楚python中变量的概念与其他语言有很大的不同
python中的对象分为:可变对象和不可变对象
可变对象: 列表、字典
不可变对象: 数字、字符串、元组
#可变对象
may2=['hello',5]
print(id(may2))
may2[0]=['hi'] #部分赋值;还是原来的对象,只是值有变化
print(id(may2))
may3=['hello',5]
print(id(may3))
may3=['hi',5] #整体重新赋值;may3指向新的对象
print(id(may3))
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#不可变对象
a=7
a='7' #a指向新的对象,与原对象失去关联
可变对象 可以给对象中的单个元素重新赋值;也可以整体重新赋值
部分赋值的过程:修改对象指定部分的值
整体赋值的过程:新建一个新对象,然后将原"标识符"指向新的对象,原来的对象将被释放
不可变对象是一个整体、不可分割;
不可变对象赋值的过程是:(和可变对象 整体赋值的过程完全相同)
小的整数和字符串在python中被缓存,且在内存中只保留一份
"引用"和"拷贝"的区别,引用类似于指针,指向一个对象
而拷贝是生成一个内容相同的新对象
写在最后,python中一切皆对象,没有变量,只有引用
本文探讨了Python语言中变量与对象的关系,指出Python没有传统意义上的变量类型,只有对象类型。标识符在Python中相当于引用,可以指向任何类型的对象,体现了Python的动态类型特性。同时,介绍了Python中的可变对象和不可变对象,以及赋值过程中对象的变化情况。通过实例展示了可变对象和不可变对象在赋值操作上的区别,强调了Python中'='实际上是引用/指向的含义。

被折叠的 条评论
为什么被折叠?



