1.Python变量类型
变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。
基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。
因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。
2.变量赋值
Python 中的变量赋值不需要类型声明。
每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。
每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:
a = 100 b = 0.1 c = 1000.00 print(a,b,c) -----结果----- 100 0.1 1000.0 ps:你会发现Python可以自动识别变量的类型,但是可以从b和c的结果可以看出,Python默认浮点型为小数点的后一位
3.多个变量赋值
Python允许你同时为多个变量赋值。例如:
a = b = c = 1,2,"hello world!" print(a,b,c) -----结果------ (1, 2, 'hello world!') (1, 2, 'hello world!') (1, 2, 'hello world!') a,b,c = 1,2,"hello world!" print(a,b,c) -----结果------ 1 2 hello world!
4.标准数据类型
Python有五个标准的数据类型:
- Numbers(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Dictionary(字典)
4.1.Numbers(数字)
Python支持四种不同的数字类型:
- int(有符号整型)
- long(长整型[也可以代表八进制和十六进制])
- float(浮点型)
- complex(复数)
数字数据类型用于存储数值。
他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。
当你指定一个值时,Number对象就会被创建:
var1 = 100 address1 = id(var1) var2 = 100 address2 = id(var2) print("var1'address="+ str(address1)) print("var2'address="+ str(address2)) -------结果------- var1'address=8791242541216 var2'address=8791242541216 var1 = 200 address1 = id(var1) var2 = 200 address2 = id(var2) print("var1'address="+ str(address1)) print("var2'address="+ str(address2)) -------结果------- var1'address=8791242544416 var2'address=8791242544416 var1 = 200 address1 = id(var1) var2 = 200 address2 = id(var2) var3 = var2 address3 = id(var3) print("var1'address="+ str(address1)) print("var2'address="+ str(address2)) print("var3'address="+ str(address3)) -------结果------- var1'address=8791246542112 var2'address=8791246542112 var3'address=8791246542112
上面的id()是地址函数,从上面的代码可以看出var1和var2都赋值100时,他们的地址都是一样的,可以说明var1和var2引用了同一个对象,即100,也就是说内存中对于1只占用了一个地址,而不管有多少个引用指向了它,都只有一个地址值,只是有一个引用计数会记录指向这个地址的引用到底有几个而已。
我们进行var1=200赋值时,发现var1的地址值变了,虽然还是var1这个引用,但是其地址值却变化了,后面的var2=200以及var3=var2,使得var1、var2和var3都引用了同一个对象,即200,所以地址值都是一样的。当var1和var2都被赋值200后,100这个对象已经没有引用指向它了,所以100这个对象占用的内存,即8791242541216地址要被“垃圾回收”,即100这个对象在内存中已经不存在了。
之所以称为不可变数据类型,这里的不可变可以理解为var1引用的地址处的值是不能被改变的,也就是8791242541216地址处的值在没被垃圾回收之前一直都是100,不能改变,如果要把var1赋值为200,那么只能将var1引用的地址从8791242541216变为8791246542112,相当于var1= 200这个赋值又创建了一个对象,即200这个对象,然后var1、var2、var3都引用了这个对象,所以int这个数据类型是不可变的,如果想对int类型的变量再次赋值,在内存中相当于又创建了一个新的对象,而不再是之前的对象。