在 python 中查询返回本地范围的对象

2024-03-01

下面是返回的程序function函数中定义的类型对象f其堆栈帧(f1)在程序退出之前仍然存在。


下面是返回的程序int类型对象,值为1024,但返回后栈帧不存在int类型对象?


根据上面两个图,为什么返回类型机制存在这种差异,当您返回时,框架不活动int类型对象。

堆栈帧处于活动状态的想法是什么function返回类型对象?


除非明确要求,否则 Python 从不进行复制(例如,对列表进行切片确实要求 Python 浅层复制列表的该部分)。

“add_two 是否引用 n 所指向的同一个 int 对象?” -- 是的,仅参考该内容int被传递并保存在框架中。在这种情况下,无论值是多少,这都适用n.

任何 Python 实现都可以保留不可变对象行的单个副本或多个副本ints——只要语义不受影响,就可以采用最方便的实现方式。

因此,在给定的实现中,每次提到文字都可能发生3指的是同一个int对象但提及文字333不需要。例如:

2>>> a=333; b=333; print(id(a), id(b))
(4298804944, 4298804944)
2>>> a=333
2>>> b=333
2>>> print(id(a), id(b))
(4298753600, 4298753336)

两种情况的语义完全相同;在第一种情况下,编译器(本质上一次在整行上调用)发现实例化和使用单个int worth 333,在第二种情况下,它更喜欢创建并使用两个这样的实例——任何一个都完全可以,因为int的不变性(这同样适用于其他数字类型、字符串、元组、冻结集——但不适用于可变类型)。

请注意,当 Python 规范提到“相同语义”时,它明确包含内省,这可能能够查明语义等效状态之间的实现差异。

id(在当前流行的 Python 实现中,通常返回对象的内存地址,但在任何情况下,只要该对象存在,根据语言规范,每个对象的 id 都是唯一的)是内省,因此is操作员。因此,如果您希望使用它来了解给定实现可能执行或不执行的某些优化,则可以。

那么,关于你的其他问题:“我的理解正确吗?” - 不。 “为什么会出现这种差异”——def构建一个函数对象,它是可变的,所以任何def即使具有相同的函数定义也必须返回一个新对象,就像例如[]构建一个列表对象,可变的,所以任何[]必须返回一个新对象。3建立一个int对象,它是不可变的,所以任何3允许(根据语言规则)返回相同或新的对象。

在编辑中添加了另一个问题:“返回函数类型对象时堆栈帧处于活动状态的想法是什么?”

答案:只要可到达,每个对象都会保持活动状态。特别是,只要返回内部(嵌套)函数(如果它们引用外部框架中的名称),外部函数的框架就会保持活动状态。

(任何 Python 实现都不会have垃圾收集不再需要存活的对象——它可以根据需要延迟垃圾收集,或者可以立即执行它——实现细节!-)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 python 中查询返回本地范围的对象 的相关文章

随机推荐

  • 如何在启动器图标中添加类似像素的活动快捷方式?

    Since the release of pixel series there has been this feature to add activity shortcuts in application icon itself by lo
  • 替换 node.js 中文本文件中的字符串

    我正在使用node js 我想读取带有一些占位符字符串的文件 并在提供文件之前动态替换它们 这不是 HTML 文件 因此模板引擎将无法工作 我怎样才能做到这一点 如果模板引擎太过分了 就使用string replace temp Hello
  • 用不同版本的 pandas 读取 pickle

    我无法读取使用不同版本的 Python pandas 保存的 pickle 文件 我知道以前曾在这里问过这个问题 但是提供的解决方案使用pd read pickle my file pkl 也不工作 我认为 但我不确定 这些 pickle
  • r 中的“部分”枢轴宽

    我有一个如下所示的数据框 Time Y 1 2 1 3 1 2 2 5 2 7 2 5 3 10 3 9 3 8 我想创造一些看起来像 Time R1 R2 R3 1 2 3 2 2 5 7 5 3 10 9 8 我必须保留时间列以进行进一
  • gccgo 上的精确

    当尝试在 Precise 上与 gccgo 链接时 出现以下链接错误 matt matt 1005P src gopath src meme gccgo cmd meme main go o meme usr bin ld cannot f
  • 通过函数传递表达式

    我在用着data table包并尝试编写一个函数 如下所示 require data table Function definition f function path key table data table read delim pat
  • Rvest html_nodes span div 和 Xpath

    我正在尝试通过阅读 XPath 代码来抓取网站 当我进入开发人员部分时 我看到这些行 span class js bestRate show 我想抓取 data abc 的所有值 假设网站上的每个元素都是一部电影 所以我想抓取页面上每部电影
  • SyncStateNotFound 错误:如何修复或避免?

    我使用 Microsoft Graph API 增量查询定期下载一些信息 消息 联系人 事件 但有时我会收到此错误 error code SyncStateNotFound innerError date 2018 06 01T06 31
  • 如何在 Watin 中通过标签名称查找元素?

    如何使用 Watin 使用 TagName 来查找特定元素或元素列表 从 WatiN 2 0 beta 1 开始 这已更改为 ie ElementWithTag h1 constraint 使用 Find XXX 方法时会创建约束 这是一个
  • Facebook ShareDialog 在完成时始终返回 .canceled

    共享对话框打开 Facebook 应用程序 尽管内容已成功共享 但我总是收到 取消打回来 在这两种情况下 当我取消共享时和共享成功时 知道出了什么问题吗 Pod 版本 Using Bolts 1 8 4 Using FBSDKCoreKit
  • 矩形内最大的空矩形

    我的数学不太好 所以我很难将公式转换为代码 而且我在谷歌上找不到任何现成的东西 我有一个包含很多小矩形的大矩形 我需要做的就是计算最大的空矩形 任何人都可以帮助我吗 这就是我想出的 没什么可说的 这是一个很大的失败 Rect result
  • 使用 MPI 和 C++ 从不同节点收集数据

    我正在开发一个包含多个从节点和一个主节点的项目 在某些时候 我需要将来自不同从节点 主节点也可以视为从节点 的数据收集到主节点 数据可以是任何类型 但我们假设它是 unsigned int 这就是数据在从节点上的样子 节点0 块01 块02
  • 在 [code] 和 [php] 标签内查找 URL [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的字符串是这样的 string Link 1 code This is a textual line www google com
  • Jackson:忽略父类属性

    有什么方法可以告诉杰克逊在序列化子类时忽略父类的属性吗 class Parent private String parentProperty1 private String parentProperty2 getter setter Ign
  • 如何使用 MVVM 和 MVVM 工具包将属性绑定到文本框?

    我是 MVVM 新手 为了学习 我创建了一个示例应用程序 以便在单击按钮时在文本框中显示消息 在我的代码中 按钮命令工作正常 但该属性未绑定到文本框 如何使用 MVVM 将属性绑定到文本框 我的代码类似于下面给出的 View
  • ASP.NET vNext - 本地化 (.resx)

    如何使用 resx 文件通过 ASP NET vNext 云优化模式 进行本地化以及如何为当前线程设置区域性 System Threading Thread CurrentThread CurrentCulture System Threa
  • 为什么这个函数将RAX压入堆栈作为第一个操作?

    在下面的 C 源代码汇编中 为什么RAX被压入堆栈 据我从 ABI 的了解 RAX 可以包含调用函数中的任何内容 但我们将其保存在这里 然后将堆栈向后移动 8 个字节 所以我认为堆栈上的 RAX 只与std throw bad functi
  • 如何解决“允许的内存大小已耗尽”错误?

    我正在使用 phpspreadsheet 我想修改一个包含 4 张纸的 xlsx 文件 我只想在 2 张表中插入数据 但我想将所有 4 张表复制到新的 xlsx 文件中 当我这样做时 我收到此错误 致命错误 允许的内存大小 53687091
  • 是否有高级 Ag-Grid 事件来侦听列状态的任何更改?

    我将 Ag Grid 与 Angular 一起使用 我想听听any修改列状态的事件 截至目前 我必须列出所有事件 columnVisible onCol event columnMoved onCol event etc 是否有我可以依赖的
  • 在 python 中查询返回本地范围的对象

    下面是返回的程序function函数中定义的类型对象f其堆栈帧 f1 在程序退出之前仍然存在 下面是返回的程序int类型对象 值为1024 但返回后栈帧不存在int类型对象 根据上面两个图 为什么返回类型机制存在这种差异 当您返回时 框架不