动态数据类型和静态数据类型

动态数据类型

Python是动态数据类型,变量不需要指定类型。

Python的变量,可变的是指向,不可通过变量名修改其指向数据单元的内容。

//函数id() 的作用是查看变量指向的内存地址。见help(id)
//内存中分配两个单元,存放数字12和13。
//x,y分别指向内存地址,类似C语言的指针
x=12
y=13
print 'x=',x,id(x)
print 'y=',y,id(y)
//让x指向y的地址
x=y
print 'x=',x,id(x)
print 'y=',y,id(y)
//内存中分配两个单元,存放数字15和16。
x=15
y=16
print 'x=',x,id(x)
print 'y=',y,id(y)
运行结果:
x= 12166579468
y= 13 166579456
x= 13 166579456
y= 13 166579456
x= 15 166579432
y= 16 166579420

可以看到变量x和y指向的内存单元在不断的变化。

而某个内存单元中的数据内容是固定不变的,例如内存单元 166579468 始终保存数据12,直到程序结束,释放空间 。

Python变量的类型是根据它所指向的内存单元中的数据类型决定的,因此不需要声明,指向什么类型,就是什么类型。

C语言的静态数据类型

#include 
int main(int argc,char * argv[]){
int x=12, y=13;
//%d输出整数,%p输出指针
printf("x=%d,x_addr = %p\n",x,&x);
printf("y=%d,y_addr = %p\n",y,&y);
x=y;
printf("x=%d,x_addr = %p\n",x,&x);
printf("y=%d,y_addr = %p\n",y,&y);
//把变量x指向的内存单元中的数据缓存15
x=15;
y=16;
printf("x=%d,x_addr = %p\n",x,&x);
printf("y=%d,y_addr = %p\n",y,&y);
return 0;
}
运行 程序:
//CentOS安装gcc
$sudo yum install gcc
//编译.c文件,生成myapp文件
$gcc -o myapp dataType.c
//运行myapp
$./myapp

运行结果:

x=12,x_addr = 0xbfd9014c
y=13,y_addr = 0xbfd90148
x=13,x_addr = 0xbfd9014c
y=13,y_addr = 0xbfd90148
x=15,x_addr = 0xbfd9014c
y=16,y_addr = 0xbfd90148

和Python的情况相反,变量x,y的指向不变,例如变量x一直指向0xbfd9014c 内存单元。

而变化的一直是变量指向的内存中的数据内容。

C语言声明一个int类型的变量,即分配一块内存空间给这个变量。

这个内存单元始终属于这个变量,且只能存放int类型的数据,直到释放内存。

静态类型语言声明变量时必须指明数据类型,因为要为每个变量提前分配好固定大小的内存空间

总结:

动态语言(又称弱类型语言),变量不用声明类型,具体类型根据指向的内存单元中的数据类型决定。

动态类型,指向可变,内存单元中的数据不可变。

静态语言(又称强类型语言),变量需要声明类型,变量指向的内存单元可存放的数据类型固定。

静态类型,内容可变,变量的指向不可变。

  • 本文来自:爱好Linux技术网

你可能感兴趣的:(动态数据类型和静态数据类型)