当我们在说同一个词的时候,它的意思往往不是同一个。因此做出相应对比整理来揭示区别。
一、数据模型类型
概念模型
逻辑模型
常见逻辑模型:关系模型(mysql)、列族模型(HBase、Cassandra,就是OneNote嵌套表格那样)、键值模型(redis、riak)、文档模型(MongoDB、CouchBase)、图模型(Neo4j、FlockDB)、层次模型(IMS)、网状模型。
二、文件数据类型
数据类型:数值型、文本型、音频型、视频型、图像型、POI型(point of interest,例如地图点)
数据结构化程度:结构化数据(二维表)、非结构化数据(文图音影,逻辑结构不严格)、半结构化数据(XML、JSON)
三、MySQL数据类型
数字
字符串
时间
四、python的数据类型
1.数值型:整数、浮点数、复数、布尔值(在python可记为0或1因此为数值型)
2.串:字符串、字节串(0-255)
3.容器型:集合、元组、列表、字典、数组(数组在原生python中没有但numpy库有)
其实各个标准资料中没有说明Python有值类型和引用类型的分类,这个分类一般是C++和Java中的。但是语言是相通的,所以Python肯定也有类似的。实际上Python 的变量是没有类型的,这与以往看到的大部分语言都不一样(JS等弱类型的也是这样)。但 Python 却是区分类型的,那类型在哪里呢?事实是,类型是跟着内存中的对象走的。类型属于对象,变量是没有类型的。一般也分实参和形参。
《learning python》中的一个观点:变量无类型,对象有类型。
Python中的变量都是指针,这确实和之前学过的强类型语言是有不同的。因为变量是指针,所以所有的变量无类型限制,可以指向任意对象。指针的内存空间大小是与类型无关的,其内存空间只是保存了所指向数据的内存地址。Python 的所有变量其实都是指向内存中的对象的一个指针。
此外,对象还分两类:一类是可修改的,一类是不可修改的。我的理解是把可修改(mutable)的类型叫做值类型,不可修改(immutable)类型叫做引用类型。
对象=确定内存空间+存储在这块内存空间中的值。
Java中,对象是分配在堆上的,存储真正的数据,而引用是在栈中开辟的内存空间用于引用某一个对象(值类型的变量也是存储到栈上)。
在Python中,数值(整型,浮点型),布尔型,字符串,元组属于值类型,本身不允许被修改(不可变类型),数值的修改实际上是让变量指向了一个新的对象(新创建的对象),所以不会发生共享内存问题。 这种方式同Java的不可变对象(String)实现方式相同。原始对象被Python的GC回收。
五、Javascript的数据类型
1.String 字符串
2.Number 数值
3. Boolean 布尔值 true/false
4. Null 空值 null
Undifined 未定义 undifined
Object 对象
Symbol(ES6)
六、C的数据类型
基本类型又包括整型类型、浮点类型
整型类型 : {基本类型(int)、短整型(short int)、长整型(long int)、*双长整型(long long int)、字符型(char)、*布尔型(bool)}
浮点类型: {单精度浮点型(float)、双精度浮点型(double)、复数浮点型(float_complex、double_complex、long long_complex) }
枚举类型: (enum)
空类型 :(void)
派生类型: {指针类型(*)、数组类型([ ])、结构体类型(struct)、共用体类型(union)、函数类型}
七、java的数据类型
Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。
八、haskell的数据类型
数值型
字符串
布尔型
九、MATLAB的数据类型
1.元胞
十、数据结构的数据类型
1.链表
2.数组
3.栈
队列
哈希表
堆(图)
二叉树