python从内存地址上加载python对象过程详解


Posted in Python onJanuary 08, 2020

这篇文章主要介绍了python从内存地址上加载pythn对象过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在python中我们可以通过id函数来获取某个python对象的内存地址,或者可以通过调用对象的__repr__魔术函数来获取对象的详细信息

def tt():
  print(111)
print(tt.__repr__())
print(id(tt))

但是不知大家是否想过,其实这个内存地址可以直接加载python对象的。有两种方法:

1. PyObj_FromPtr

在_ctypes包中,就提供PyObj_FromPtr这个api去实现我们的需求。代码如下

def tt():
  print(111)
print(tt.__repr__())
print(_ctypes.PyObj_FromPtr(id(tt)))

运行结果如下:

<function tt at 0x106c628c8>
<function tt at 0x106c628c8>

2. gc.get_objects

我们也可以通过gc的get_objects方法来实现。先来看一下官方介绍

gc.get_objects()
Returns a list of all objects tracked by the collector, excluding the list returned.

大致意思为,获取所有可以追踪的对象。所以,我们可以通过第二种方式来实现从特定内存地址加载python对象

def tt():
  print(111)
print(tt.__repr__())

for i in gc.get_objects():
  if id(i) == id(tt):
    print(i)

方法很简单,通过gc.get_objects获取所有对象,一一检查这些对象的内存地址是否与给定的内存地址相符,如果相符则返回对象。

结论

额,很扯淡的东西,最好不要乱用这种东西。因为出错的话,try except语句都无法捕捉到这种异常。就当是了解一下吧

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中的各种函数的使用
May 24 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
详解Python发送email的三种方式
Oct 18 Python
对python 读取线的shp文件实例详解
Dec 22 Python
Python零基础入门学习之输入与输出
Apr 03 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
13个Pandas实用技巧,助你提高开发效率
Aug 19 Python
Python ellipsis 的用法详解
Nov 20 Python
Python脚本调试工具安装过程
Jan 11 Python
Python运算符+与+=的方法实例
Feb 18 Python
pytorch中[..., 0]的用法说明
May 20 Python
PyCharm第一次安装及使用教程
Jan 08 #Python
Python namedtuple命名元组实现过程解析
Jan 08 #Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 #Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 #Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 #Python
pycharm激活码有效到2020年11月底
Sep 18 #Python
pymysql的简单封装代码实例
Jan 08 #Python
You might like
PHP mkdir()定义和用法
2009/01/14 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
js 数组操作代码集锦
2009/04/28 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
JS模块与命名空间的介绍
2013/03/22 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
python 打印对象的所有属性值的方法
2016/09/11 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
python opencv实现图像边缘检测
2019/04/29 Python
python主要用于哪些方向
2020/07/05 Python
Django跨域请求原理及实现代码
2020/11/14 Python
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
售后专员岗位职责
2013/12/08 职场文书
出国导师推荐信
2014/01/16 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
离婚案件上诉状
2015/05/23 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle