当我读到有关Python和计算机内存的文章时:
变量是一种跟踪存储在计算机中的值的方法 记忆。变量是计算机内存中的命名位置。蟒蛇 将变量保存在与值不同的列表中。变量会 包含一个内存地址,该内存地址包含该值。 然后变量引用该值。 Python会选择内存 地址给你。
Terminology A value has a memory address. A variable contains a memory address. A variable refers to a value. A variable points to a value. Example: Value 8.5 has memory address id34. Variable shoe_size contains memory address id34. The value of shoe_size is 8.5. shoe_size refers to value 8.5. shoe_size points to value 8.5.
我的第一个问题是:这是否意味着当我创建一个变量x
时,会为其值保留一个内存位置,并为其内存地址保留另一个内存位置?!
我的第二个问题是:此规则是否适用于C编程语言?!
答案 0 :(得分:2)
例如,当我创建变量x时,将为其值保留一个内存位置
是
并为其内存地址保留另一个内存位置?!
Python内部几乎肯定会这样做,虽然因为这是一个实现问题,所以它是无编程的 - 你不直接访问它。这将我们带到:
此规则是否适用于C编程语言?!
在C中,我们将这称为指针和变量之间的关系:
int x;
int *p = &x;
这里有一个存储位置存储'x'中的值,另一个位置存储'p'中的值。但是,p 中的值是x 中值的地址。
Python在C中实现并使用动态类型,因此所有变量都是涉及指针和普通值的更复杂的对象(“引擎盖下”),但同样,因为你不能在python中以编程方式访问它,所以它不是很有意义的。地址在C代码中直接访问和操作,但不在python代码中(但它们在C代码中实现python)。
答案 1 :(得分:1)
Python中的变量是“参考”,因为它们本身不是值,但将引用到值。值本身是不可变的,并单独存储。如果你“赋值”一个变量,实际上发生的是查找值(可能已创建),并将该值的引用赋给变量。
如果你要在C中处理类似的变量,你会经常使用指针。例如,为其分配不同值的“整数变量x
”将如下所示:
int * make_int(int val)
{
int * p = malloc(sizeof(int));
*p = val;
return p;
}
int * x = make_int(5); // Python: x = 5 # x is a new variable
x = make_int(7); // x = 7
x = make_int(11); // x = 11
不同之处在于上面的C代码在每一步都会泄漏内存,而在Python中,内存会以某种方式进行管理,例如,如果请求的值已经有匹配的分配,那么你只需要指向它而不是创建一个新对象。换句话说,只有一个,独特的“5”。
答案 2 :(得分:0)
如果你熟悉C,大多数“现代”语言中的变量都非常接近C中的指针。
即
x = 20
在python中,x指的是一个包含值为20的int(?)对象的内存位置。
在C ++中,这将是
int *x = new int(20);
这是使用python时需要了解的内容。如何存储内存位置,即x变量本身的内容,我不确定..在C / C ++中它们存储在当前作用域的堆栈帧中,在python中显然它们存储在字典中。(来源:托马斯回答)
答案 3 :(得分:0)
在python中,所有变量都存储在字典中,所以也许这就是你从中获得混淆的地方