当前位置: 首页 > 知识库问答 >
问题:

使1=2为真?

谢烨烨
2023-03-14

Pythonints是封装实际数值的对象。出于好奇/出于好玩,我想知道:我们能搞乱这个值吗?例如,将对象1的值设置为2?所以1==2变成True

共有2个答案

彭炳
2023-03-14

在Python2中有一种简单得多的方法——TrueFalse没有受到保护,因此您可以将内容分配给它们。

>>> True = False
>>> (1 == 2) is True
True
常自怡
2023-03-14

是的,我们可以。但不要在家里这样做。说真的,1对象在很多地方都有使用,我不知道这可能会损坏什么,以及这可能会对您的计算机造成什么影响。我拒绝承担所有责任:-)。但我发现了解这些东西很有趣。

id函数为我们提供内存地址,ctypes模块让我们处理内存:

import ctypes

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

print(1 == 2)

x = 40
print(x + 1)

输出:

True
42

在线试试吧!。我在那里试过,因为这些网站无论如何都要受到保护,免受我们的黑客攻击。

更多解释/分析:

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)

输出(在线试用!):

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

调用getrefcount会增加引用计数,不知道为什么会增加3。总之,除了我们之外,大约有134个东西引用了1对象,我们可能会把它们都搞乱,所以。。。真的不要在家里尝试。

数字指的是CPython如何将ints存储为基数230中的数字。例如,x=2**3000有101个这样的数字。输出为x=123**456更好的测试:

reference count:  1 2
type address:     140078560107936 140078560107936
number of digits: 106 106
lowest digit:     970169057 970169057
 类似资料:
  • 问题内容: Python如何评估表达式? 我插了多少,这就是答案。请任何人可以解释这种行为 因为它是印刷,因为它是印刷 问题答案: 您的表情与: 可以在任何数字表达式之前使其为负,或不执行任何操作(存在对称性选项)。带有负号: 和 我看到您澄清了您的问题,说您来自C背景。在Python中,没有像C和C这样的增量运算符,这可能是造成混淆的原因。要递增或递减变量,或在Python中使用以下样式:

  • 我是一名高中生,目前正在为州学术会议(UIL)做准备。我有一个问题,我到处找,似乎找不到答案!为什么要打印0.0?

  • 本文向大家介绍题目 info: { a.b: 1, c: 2 }, 转化为 info2:{ a: { b: 1 }, c: 2 }相关面试题,主要包含被问及题目 info: { a.b: 1, c: 2 }, 转化为 info2:{ a: { b: 1 }, c: 2 }时的应答技巧和注意事项,需要的朋友参考一下 No description provided.

  • 我已经花了所有的努力来解决这个问题。:)我请求帮助。 为了理解: “空”-第(- “数字”——父母的位置。第一分段(- 所以 [“空”、“0”、“1”、“2”、“2”、“1”、“0”]到[“1”、“1.1”、“1.1.1”、“a”、“b”、“1.1.2”、“1.2”] “null”:第一个元素“null”-

  • 为什么这个程序的输出是而不是 当你除以3/2,它等于1.5,我认为Java只取整数的第一个值。发生什么事?

  • 本文向大家介绍系列1 ^ 2 + 3 ^ 2 + 5 ^ 2 +的总和。。。+(2 * n-1)^ 2在C ++中,包括了系列1 ^ 2 + 3 ^ 2 + 5 ^ 2 +的总和。。。+(2 * n-1)^ 2在C ++中的使用技巧和注意事项,需要的朋友参考一下 在这个问题上,我们得到级数n。我们的任务是找到给定n值的序列1 ^ 2 + 3 ^ 2 + 5 ^ 2 + ... +(2 * n-1)