gpt4 book ai didi

python - arr = [1, 2, 3] 的引用 arr 存储在哪里?

转载 作者:行者123 更新时间:2023-11-30 20:47:57 25 4
gpt4 key购买 nike

假设这样一个 C 代码片段

//ptr_ops.c -- pointer operations
#include <stdio.h>
int main(void)
{
int arr[] = {100, 200, 300, 400, 500};
int *ptr1, ptr2, ptr3;

ptr1 = arr;
printf("&ptr1 = %p, ptr1 = %p, *ptr1 = %d", &ptr1, ptr1, *ptr1);

return 0;
}

它产生:

In [11]: !./a.out
&ptr1 = 0x7ffeeefc9790, ptr1 = 0x7ffeeefc97a0, *ptr1 = 100

我的结论是:

ptr1 = 0x7ffeeefc97a0arr[]的地址,&ptr1是存储指针或变量本身的位置。

关于Python

In [12]: arr = [1, 2, 3]
In [13]: hex(id(arr))
Out[13]: '0x106065088'

'0x106065088'是arr值的地址,那么引用“arr”呢,它存储在哪里?

最佳答案

对顶级名称的引用通过模块的 namespace 绑定(bind)。如果您在解释器中运行,则该模块称为 __main__ 。模块通常有 __dict__引用所有顶级名称(如 'arr' )到实际对象引用(如 arr 引用的任何内容)的映射的属性。

一般来说,所有名称都存储在某种命名空间中。基本类型是对象命名空间,它们相对永久,可以通过 __dict__ 工作。或描述符(例如 __slots__ )和函数本地命名空间,仅在函数运行时存在。通常,模块和类是具有重要 namespace 的对象。当在本地命名空间中找不到名称时,有一些规则可以解析该名称。这些规则的通用名称是缩写 LEGB。

CPython 执行称为引用计数的操作来了解何时释放内存。当不再存在对某个对象的引用时,该对象将被垃圾收集并最终被删除。由于这是特定解释器的实现细节,从技术上讲,一个对象可以存在于内存中,而无需任何对其的有效引用(至少用户无法访问,根本没有任何引用,您将最终导致内存泄漏)。

关于python - arr = [1, 2, 3] 的引用 arr 存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52837147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com