栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

ctypes.string

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ctypes.string

代码是用jupyter notebook写的

说实话我也不清楚python里到底怎么看地址。。。
id、memoryview、numpy.ctypes.data得到的“地址”都不一样。。。

import numpy
from ctypes import string_at
x = numpy.arange(6).reshape(2,3) + 1
x
'''输出
array([[1, 2, 3],
       [4, 5, 6]])
'''
# memoryview 
print((x.data,type(x.data)))
print(x.ctypes.data)
'''输出
(, )
3000149354832
'''
print(string_at(x.ctypes.data,x.nbytes).hex())
print(x.data.hex())
'''输出
010000000200000003000000040000000500000006000000
010000000200000003000000040000000500000006000000
'''
x = x.T
print(x)
print(string_at(x.ctypes.data,x.nbytes).hex())
print(x.data.hex())
'''输出
[[1 4]
 [2 5]
 [3 6]]
010000000200000003000000040000000500000006000000
010000000400000002000000050000000300000006000000
'''
print(x.data)
print(x.ctypes.data)
'''输出

3000149354832
'''
# 可以发现和转置前一样

数组转置只改变了读取顺序,没有改变内存中的内容(只是推测)
string_at是按照内存地址顺序读取的
memoryview似乎仍保留了数组的读取顺序

值得一提的是,重复执行上面的代码后,memoryview(x.data)的值没有发生变化,x.ctypes.data的值每次都会变
个人感觉后面的更像地址一点
参考https://blog.csdn.net/blogshinelee/article/details/104256214

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/619303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号