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 相关文章推荐
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
Python封装shell命令实例分析
May 05 Python
python通过函数属性实现全局变量的方法
May 16 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
Python 中导入csv数据的三种方法
Nov 01 Python
Python中的四种交换数值的方法解析
Nov 18 Python
Python学习笔记之函数的参数和返回值的使用
Nov 20 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
Python colormap库的安装和使用详情
Oct 06 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 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 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
Python yield 使用浅析
2015/05/28 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
Linux面试题LINUX系统类
2014/11/19 面试题
安全生产计划书
2014/05/04 职场文书
殡葬服务心得体会
2014/09/11 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android