返回信息流python文盲。遇到一个问题
python中一个整型占用24个字节的内存。现在假设a=123,现在我用socket通信,send(a)的时候,会把这24个字节的数据都发送过去吗?
还有采用numpy时有方法,numpy.int16(),如果a=numpy.int16(123)时,sys.sizeof(a)=24,a.itemsize=2,分别怎么理解呢?
真心求教。
这是一条镜像帖。来源:北邮人论坛 / python / #18185同步于 2017/6/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
求教,关于内存的一点疑问
xybetter
2017/6/19镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
不大,我发送的就是int16的数而已。我想知道接收端将它存进buf里的时候是占用的内存是24位吗?
【 在 ahql 的大作中提到: 】
: 大型数组可以用memoryview来发送
Cpython中的整数是用结构体表示的,能够根据数值的大小动态申请内存。
socket发送数据的话只能发送字节序列,直接send对象(python中整数也是对象)的话就是序列化的问题了吧,不确定的话就手动转成字节序列,用struct.pack之类的
对于numpy,猜测numpy.int16本身仍然是个对象,需要结构体表示,但是这个结构体中存储数值的部分应该是固定为16位了,不像一般的int能够扩展
-----------------------不确定的话就查文档吧...
你的解释应该是比较合理的
【 在 intmain 的大作中提到: 】
: Cpython中的整数是用结构体表示的,能够根据数值的大小动态申请内存。
: socket发送数据的话只能发送字节序列,直接send对象(python中整数也是对象)的话就是序列化的问题了吧,不确定的话就手动转成字节序列,用struct.pack之类的
: 对于numpy,猜测numpy.int16本身仍然是个对象,需要结构体表示,但是这个结构体中存储数值的部分应该是固定为16位了,不像一般的int能够扩展
: ...................