![](/img/trans.png)
[英]What happens to the variable in this case when it is overwritten with self?
[英]What happens when declaring a variable?
當我閱讀有關Python和計算機內存的這篇文章時:
變量是一種跟蹤存儲在計算機內存中的值的方法。 變量是計算機內存中的命名位置。 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編程語言?
例如,當我創建一個變量x時,將為其值保留一個存儲位置
是。
並為它的存儲地址保留了另一個存儲位置?
Python的內部原理幾乎可以做到這一點,盡管由於這是實現的問題,所以從編程上來說是無關緊要的,您不能直接訪問它。 這使我們能夠:
此規則是否適用於C編程語言?
在C語言中,我們將其稱為指針與變量之間的關系:
int x;
int *p = &x;
這里有一個將值存儲在“ x”中的存儲位置,以及另一個將值存儲在“ p”中的存儲位置。 但是,p 中的值是x中值的地址 。
Python是用C實現的,並且使用動態類型,因此您的所有變量都是更復雜的對象(“幕后”),涉及指針和純值,但是同樣,由於您沒有在python中以編程方式進行訪問,因此它並不是很有意義。 地址可以直接用C代碼而不是python代碼訪問和操縱(但它們在實現python的C代碼中)。
在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”。
如果您熟悉C,則大多數“現代”語言中的變量都非常接近C中的指針。
即
x = 20
在python中,x指向包含值20的int(?)對象的內存位置。
在C ++中,這將是
int *x = new int(20);
這是使用python需要了解的內容。 我不確定如何存儲位置,即x變量本身的內容。在C / C ++中,它們是否存儲在當前作用域的堆棧框架中,在python中,它們顯然存儲在字典中。資料來源:托馬斯的答案)
在python中,所有變量都存儲在字典中,所以也許這是您從中得到困惑的地方
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.