前言:
今天咱们对“python定义结构体指针”都比较重视,我们都需要剖析一些“python定义结构体指针”的相关知识。那么小编也在网摘上汇集了一些对于“python定义结构体指针””的相关知识,希望我们能喜欢,兄弟们快快来学习一下吧!在很多Python技术类书籍中,经常看到Python中的类型对象存储的是指针,但一直无法从更深层次去理解这种设计的目的。希望下面这篇文章能从语言设计出发,来一番探索。
###### 1、Python是动态类型语言,可以动态输入 ######
#Python中的数据类型是动态推断的,可将任何类型的数据指定给任何变量
x = 4x = 'four'
这里将x变量的内容由整型转变成了字符串
区别于其它静态语言例如C,需要先明确声明变量类型。以上同样的赋值操作,在C语言中会出现编译错误。
如下:
int x = 4;x = 'four'; //编译失败
###### 2、指针设计带来的固定列表与动态列表 ######
Python中的整型只是一个指针,指向包含这个对象所有信息的某个内存位置
标准的Python是由C语言编写,本质上每个Python对象都是一个伪C语言结构体
如下是Python源码中长整型的定义和说明
struct _longobject { long ob_refcnt; --引用计数,帮Python处理内存的分配和回收 PyTypeObject *ob_type; --将变量的类型编码 size_t ob_size; --指定数据成员的大小 long ob_digit[1]; --Python变量表示的实际整型值 };
例: Python中,x = 1000 时,x并非一个”原生“整型,而是一个指针,指向一个C语言的复合结构体。
PyObject_HEAD 是结构体中包含引用计数、类型编码等其它信息
Python对象的结构体中包含的额外信息,有如下影响
优点:Python可以自由、动态编码
缺点:相比于C语言等静态语言,会有额外的开销,在多个对象组合的结构体中会成为负担
#固定类型列表:所有元素的类型相同,导致每个元素对象各自的类型信息、引用计数等会有冗余
lst1 = list(range(10))print(type(lst1[0]))
#动态类型列表:利用Python的动态特性,创建异构列表,包信不同类型的元素,导致每个元素对象都维护一套各自的类型信息、引用计数等
lst2 = [True,'2',0,3.4]print(list(type(item) for item in lst2))
######3、Python列表与Numpy数组的区别 ######
Python 列表结构灵活但处理低效 - 包含一个指向指针块的指针,这其中的每一个指针对应一个完整的 Python 对象 。
Numpy 数组结构固定但处理高效 - 它包含一个指向连续数据块的指针
标签: #python定义结构体指针