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中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
Python随机生成信用卡卡号的实现方法
May 14 Python
分享Python字符串关键点
Dec 13 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
浅谈Python中的私有变量
Feb 28 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
Python提取频域特征知识点浅析
Mar 04 Python
Django之无名分组和有名分组的实现
Apr 16 Python
python 实现交换两个列表元素的位置示例
Jun 26 Python
Python中栈、队列与优先级队列的实现方法
Jun 30 Python
Pytho爬虫中Requests设置请求头Headers的方法
Sep 22 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
php与paypal整合方法
2010/11/28 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
使用php实现截取指定长度
2013/08/06 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
ES6 fetch函数与后台交互实现
2018/11/14 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
Python Tkinter简单布局实例教程
2014/09/03 Python
在Python中使用swapCase()方法转换大小写的教程
2015/05/20 Python
PyQt5实现简易电子词典
2019/06/25 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
python 基于opencv实现图像增强
2020/12/23 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
平面设计师的工作职责
2013/11/21 职场文书
简历自我评价模版
2014/01/31 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
班班通校本培训方案
2014/03/12 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python