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

动态数据类型

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 <stdio.h>
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类型的数据,直到释放内存。

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

总结:

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

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

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

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

时间: 2024-10-07 03:25:55

动态数据类型和静态数据类型的相关文章

OC基础(6)静态数据类型和动态数据类型

静态数据类型: 1.在编译时就知道变量的类型. 2.知道变量中有哪些属性和方法 3.在编译的时候就可以访问这些属性和方法, 4.通过静态数据类型定义变量, 如果访问了不属于静态数据类型的属性和方法, 那么编译器就会报错 5.默认情况下所有的数据类型都是静态数据类型(id除外) 动态数据类型: 1.在编译的时候编译器并不知道变量的真实类型, 只有在运行的时候才知道它的真实类型 2.并且如果通过动态数据类型定义变量, 如果访问了不属于动态数据类型的属性和方法, 编译器不会报错 id与NSObject

动态语言和静态语言、编译型语言和解释型语言、强类型语言和弱类型语言的分析

一.动态语言和静态语言1. 我们常说的动.静态语言,通常是指: 动态类型语言 Dynamically Typed Language 静态类型语言 Statically Typed Language 可能还有:动.静态编程语言 Dynamic\Statically Programming Language 2.    动态类型语言:在运行期间检查数据的类型的语言例如:Ruby\Python这类语言编程,不会给变量指定类型,而是在附值时得到数据类型.Python是动态语言,变量只是对象的引用,变量a

JDBC数据类型、Java数据类型、标准sql类型

本文转自:http://www.cnblogs.com/shishm/archive/2012/01/30/2332142.html 谢谢原作者细心的总结,很赞! 本概述是从<JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference>这本书中摘引来的.JavaSoft 目前正在准备这本书.这本书是一本教程,同时也是 JDBC 的重要参考手册,它将作为 Java 系列的组成部份,在 1997 年春季由 Addis

编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的区别

一.编译型和解释型 我们先看看编译型,其实它和汇编语言是一样的:也是有一个负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码.这个过程说得专业一点,就称为编译(Compile),而负责编译的程序自然就称为编译器(Compiler).如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就会直接生成一个可执行文件,我们就可以直接运行了.但对于一个比较复杂的项目,为了方便管理,我们通常把代码分散在各个源文件中,作为不同的模块来组织.这时编译各个文件时就会生成目标文件(Object  

多态 这是动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。

多态 类具有继承关系,并且子类类型可以向上转型看做父类类型,如果我们从 Person 派生出 Student和Teacher ,并都写了一个 whoAmI() 方法: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def whoAmI(self): return 'I am a Person, my name is %s' % self.name clas

动态语言,静态类型,强类型定义语言,弱类型定义语言,

1 动态语言和静态语言 通常我们所说的动态语言.静态语言是指动态类型语言和静态类型语言.   1 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来.Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言. 2 静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在

动态语言和静态语言

动态语言Dynamically Typed Language例如:ECMAScript(JavaScript).Ruby.Python.VBScript.php也叫动态类型定义语言与静态类型定义相反,一种在执行期间才去发现数据类型的语言,动态语言是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.动态语言的类型检查是在运行时做的.它的优点是方便阅读,不需要写非常多的类型相关的代码:缺点是不方便调试,命名不规范时会造成读不懂,不利于理解等.目前java平台下的

什么是动态语言和静态语言?静态语言动态语言的区别

定义 通常我们所说的动态语言.静态语言指 动态类型语言(Dynamically Typed Language)和 静态类型语言Statically Typed Language).还有一个 Dynamic Programming Language (动态编程语言),静态编程语言. 动态类型语言:在运行期间检查数据的类型的语言.用这类语言编程,不会给变量指定类型,而是在附值时得到数据类型.如:Python和ruby就是典型动 态类型语言.很多脚本语言vbscrīpt,javascrīpt也是这类语

解释型语言和编译型语言、弱类型语言和强类型语言、动态语言和静态语言的区别

计算机是不能理解除了机器语言以外的任何语言所以必须要把程序员所写的程序语言都翻译成机器语言才能执行程序.程序语言翻译成机器语言的工具,叫做翻译器. 编程语言  ————> 翻译器  ————> 计算机语言(二进制) 翻译器翻译的方式有两种:一是 编译,二是 翻译.两种方式之间对区别在于翻译的时间点不同. 编译器:是在代码执行之前进行编译,生成中间代码文件 解释器:是在运行时进行及时解释,并立即执行(当编译器以解释方式运行的时候,也称之为解释器) 举个栗子: 编译型语言:就像是请客的时候要先把所