我正在看SO中的一个问题,并查看了问题。
Why id function behaves differently with integer and float?
我尝试在 python 中为 a 和 b 获得相同的 id。但是当我在 c 上尝试同样的方法时,
main()
{
int a=4,b;
b=2+2;
printf("%p\n",&a);
printf("%p",&b);
}
但这打印了不同的值。为什么不同?
最佳答案
等效的 Python 代码的工作原因在您链接的问题的几个答案中给出 - Python(或者至少是 CPython)恰好缓存了一些小整数值 - 其中有 4 个,因此每个 Python 整数对象等于 4 将是同一个对象,因此具有相同的 id
。
在 C 中,整数是可变的,因此编译器无法执行这种优化 - 如果您递增 a
,您不会期望 b
发生变化 如果 Python整数是可变的,在等效代码中 a
和 b
的 id
同样会不同。
在实现层面,int
对 C 的意义与对 Python 的意义不同——即使它们恰好在程序中服务于相同的目的。
关于python - python和c中的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15997078/