我们能让 1 == 2 成立吗? [复制]

2024-04-26

Python ints are objects封装实际数值。我们可以修改该值吗,例如设置对象的值1到2?以便1 == 2变成True?


我们可以。但不要在家里这样做。说真的,1对象在很多地方使用,我不知道这可能会破坏什么以及可能对您的计算机产生什么影响。我拒绝承担所有责任。但我发现了解这些事情很有趣。

The id功能 https://docs.python.org/3/library/functions.html#id给我们内存地址和ctypes module https://docs.python.org/3/library/ctypes.html让我们扰乱记忆:

import ctypes

ctypes.memmove(id(1) + 24, id(2) + 24, 4)

print(1 == 2)

x = 40
print(x + 1)

Output:

True
42

在线尝试一下! https://tio.run/##NYoxDoAgEAT7e8WVEI0RpLDhNUoixcEFicHXnyRqNTOb5bseOS0rF5FInEvFrd4cToCXEwWifAUVd2U0DmjdiN3t704DcImpKoPeo@3Z0KObv7X1n9EiDw。我在那里尝试过,因为无论如何,这些网站都必须受到保护,免受我们的黑客攻击。


更多解释/分析:

The memmove从复制值2对象进入1目的。它们的大小各为 28 个字节,但我跳过了前 24 个字节,因为那是对象的引用计数、类型地址和值大小,我们也可以查看/验证:

import ctypes, struct, sys

x = 1
data = ctypes.string_at(id(x), 28)
ref_count, type_address, number_of_digits, lowest_digit = \
    struct.unpack('qqqi', data)

print('reference count: ', ref_count, sys.getrefcount(x))
print('type address:    ', type_address, id(type(x)))
print('number of digits:', number_of_digits, -(-x.bit_length() // 30))
print('lowest digit:    ', lowest_digit, x % 2**30)

Output (在线尝试一下! https://tio.run/##bZDBbsMgEETvfMVeKuPIcdrkElnKn1RCBLCDmgCGtWp/vbuEpo2q@oIZ7cybJSx48e5wDHFd7S34iKBwCSY1kDBOCulcEmMznOCNaYmSfspESwPWDUIit5rPdQP7Y82i6YXykyNjnhJS62gSxbnpdjZR@F5oO1gk5eo/TcJypdR3BvQVaju5INUHr8ZxtFUDGVwzFgiIvCKGicYpA3dSBzTxxKXC7WCQlLtA1eqHM1eC70pdxlV/a9IqWcimH1epDr6HUr2r/ltny7dze7YorsYNeOE17HZweP2NKfuWjAf8@Q0amOEF9psNmdb1Cw):

reference count:  135 138
type address:     140259718753696 140259718753696
number of digits: 1 1
lowest digit:     1 1

引用计数增加getrefcount打电话,但我不知道为什么到 3。无论如何,除了我们之外还有大约 134 个东西引用了1对象,我们可能会把它们全部搞砸,所以……真的不要在家里尝试这个。

The "digits" refer to how CPython stores ints as digits in base 230 https://github.com/python/cpython/blob/247480a21cb165efdacc346a2d589dfc27e18283/Include/cpython/longintrepr.h#L11-L39. For example, x = 2 ** 3000 has 101 such digits. Output for x = 123 ** 456 for a better test:

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

我们能让 1 == 2 成立吗? [复制] 的相关文章

随机推荐

  • Unicode字符串的跨平台迭代(使用ICU计算字素)

    我想迭代每个字符一个 Unicode 字符串 处理每个代理对并将字符序列组合为一个单元 一个字素 Example 文本 由代码点组成 U 0928 U 092E U 0938 U 094D U 0924 U 0947 其中 U 0938 a
  • 如何更改反应导航中的后退按钮路线

    我正在使用反应导航 堆栈导航 我想更改我的标题后退按钮图标路线 Home 订票 我的预订 这些是我项目中的屏幕 现在 当我单击 MyBookings 屏幕中的标题后退按钮时 它应该路由到主屏幕 如果您的 stackNavigator 堆栈配
  • Git 术语:tip 和 HEAD 之间的区别?

    和Git有什么区别HEAD and tip 抱歉 如果在其他地方有人问过这个问题 没有看到任何其他关于此的问题 From 吉特词汇表 https git scm com docs gitglossary html 可能通过git help
  • 使用opencv在灰度图像中绘制彩色矩形

    是否可以使用opencv在灰度图像中绘制彩色矩形 我尝试了几种方法 但整个图像要么变成灰度 要么变成 RGB 您不能获得混合的灰色和彩色图像 你可以看看有没有办法在同一图像opencv C 上同时拥有灰度和RGB像素 https stack
  • 如何为幻灯片中的每个图像添加链接?

    我使用了 为什么这张幻灯片闪烁 中的代码 彼得在网站上给出了您的答案之一 它工作得很好 没有任何闪烁 但我的问题是如何为每个图像添加超链接 我把代码贴出来供大家参考 Script function Edit these Assumes yo
  • jQuery $(window).resize() 在减小窗口高度时不起作用

    我有一个 id 为 main 的 div 我想使用 jQuery 设置它的高度并使其在window resize它的高度是使用函数修改的 但由于某种原因 它仅在增加窗口高度时才能正常工作 而在减小窗口高度时则不起作用 这是JS functi
  • 设置 sendBufferSize() 后,UDP 套接字的消息太长

    我正在尝试发送 UDP 数据报 包含协议缓冲区消息 并收到消息太长的异常 java io IOException Message too long at java net PlainDatagramSocketImpl send Nativ
  • Angular 动态表上的 Jquery 表排序器

    我有一个表 需要使用 Jquery Tablesorter 插件进行排序等 它对于静态表工作得很好 但是当我尝试在 Angular 支持的表上使用时 它不起作用 有谁知道为什么会这样 http plnkr co edit SUjs1h7pr
  • Vaadin 7.0.1 带有 JPAContainer 和 FieldGroup 的组合框

    抱歉 如果这是一个新问题 我有两个 JPAContainer 一个用于 Employee 类 表 一个用于语言类 表 员工可以选择一种语言 我正在尝试创建一个员工编辑表单 其中包含用于语言选择的组合框和用于处理绑定和创建的 FieldGro
  • 获取进程的返回值

    您好 我正在尝试执行以下操作 我有一个可以接受参数 数字 的过程 并返回这些数字的总和 Process P Process Start sPhysicalFilePath Param int result P ExitCode 我从 Exi
  • 如何在不锁定 Excel 文件的情况下打开它?

    我有一个构建 Excel 报告 然后为用户打开它的流程 问题是 如果有人让文件保持打开状态 则该文件将保持锁定状态 并且在第一个人退出 Excel 文件之前 其他人都无法生成报告 有没有办法打开 Excel 文件而不锁定它 使用Proces
  • android什么时候会在没有唤醒锁的情况下停止CPU?

    我知道 android 使用唤醒锁来保持 cpu 运行或屏幕打开 很明显 屏幕唤醒锁可以防止用户活动计时器在用户不活动一段时间后关闭屏幕 但我想知道cpu唤醒锁到底什么时候生效 1 如果我创建一个新线程并在没有任何唤醒锁的情况下在后台继续耗
  • 如何在 Jupyter Notebook 中加载 CSV 文件?

    我是新人 正在研究机器学习 我偶然发现了一个在网上找到的教程 我想让该程序运行起来 这样我就能更好地理解 但是 我在将 CSV 文件加载到 Jupyter Notebook 时遇到问题 我收到此错误 File
  • “sendKeys”在 Selenium WebDriver 中不起作用

    我无法使用 WebDriver 在我的应用程序中赋予任何价值 我的应用程序正在使用框架 我可以清除文本框的值driver findElement By name name clear 但我无法使用任何值driver findElement
  • Jenkins JobDSL multibranchPipelineJob更改脚本路径

    我正在尝试在 jobDSL 中创建多分支PipelineJob 但是 Jenkinsfile 位于默认位置的替代位置 我已经查看了文档https jenkinsci github io job dsl plugin path multibr
  • 上传到服务器后,页面上只有一个 getter 起作用

    我有一个使用 Struts2 框架的网站 它在我的本地计算机上运行良好 但是当我将其上传到远程服务器 托管 时 一些 getter 和 setter 变得不调用 例如 操作 ForecastAction java JSP 预测 jsp 这是
  • 在 cakephp 2.0.2 中使用 shell 类的插件组件

    我想使用我的 shell 类中的插件组件 我正在尝试使用 App import Component Myplugin Mycomponent this gt Mycomponent new MycomponentComponent 不幸的是
  • 如何处理 Android 国际象棋应用程序中的拖动?

    我刚刚开始开发 android 应用程序 使用 java 在 android studio 中 如果这很重要的话 我正在做一个小项目 只是为了好玩 我想创建自己的国际象棋应用程序 到目前为止我已经做了很多事情 我设置了一个菜单来切换到另一个
  • 如何识别 Pandas 的 Parquet 后端

    据我所知 Pandas 可以使用不同的后端读取和写入 Parquet 文件 pyarrow and fastparquet 我有一个带有 Intel 发行版的 Conda 发行版 并且 它可以工作 我可以使用pandas DataFrame
  • 我们能让 1 == 2 成立吗? [复制]

    这个问题在这里已经有答案了 Python ints are objects封装实际数值 我们可以修改该值吗 例如设置对象的值1到2 以便1 2变成True 我们可以 但不要在家里这样做 说真的 1对象在很多地方使用 我不知道这可能会破坏什么