簡體   English   中英

聲明變量時會發生什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM