Python 有趣的一个小问题

2017-03-24 14:12:12 +08:00
 zhy0216
令变量 a = 1, 如何在不改变 a 的内存地址的前提下, 即 id(a) 不变, 改变 a 的值.

我无聊翻文档看到的...
2557 次点击
所在节点    问与答
23 条回复
shyling
2017-03-24 19:03:49 +08:00
@glasslion hhhhhh
aploium
2017-03-24 20:25:11 +08:00
歪个楼, 如果只是要 id(a) 不变的话, 覆盖掉 id() 就行

如果要正经做的话可能挺难的

看一个例子

```python
>>> a=1
>>> b=1
>>> id(a)==id(b)==id(1)
True
```

python 内部会预创建一些小整数, 之后所有用到这些小整数的地方都应用同一个内存实例

再看一个比较大的数

```python
>>> a=500000
>>> b=500000
>>> id(a)
1658156658384
>>> id(b)
1658161244880
>>> id(500000)
1658161245136
```

所以如果不使用某些黑魔法的话, 要做到这样, 可能会导致所有的 1 都发生改变

当然...因为 python 本身实在是太灵活了, 你甚至可以在运行时去魔改语法树, 所以我也不知道有没有什么黑科技能实现这个东西
mingyun
2017-03-28 22:17:01 +08:00
@aploium 小整数是 0-256 吧 记得貌似是

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/350034

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX