python中的變數怎樣開闢記憶體
python下的變數
從上面我們可以看到:
好,我們大家接著看:
從上面的程式中,我們知道系統給分配的地址分別是:
假如系統為4分配了一塊記憶體,遵循某種規則(類似於c裡面的記憶體對齊),那麼接下來為5分配了另一塊記憶體,權且分配到了10413976
假如遵循某種規則的話,應該是6也分配到了10413976去了,可是,他被分配到了10413964
這,哈哈,應該就是這樣的了的吧!!!!
也就是說:python中,系統還是python本身為其分配記憶體的時候就已經根據這個值是多少,確定了記憶體的位置了。。。
不需要預先宣告變數的型別,變數的型別和值在賦值的那一刻被初始化(宣告和定義的過程一起完成)
在python中, 每一個變數在記憶體中建立,我們可以通過變數來檢視記憶體中的值
哈哈,這裡是不是很熟悉,跟c中的指標一樣啊(訪問記憶體中的值)
首先大家需要了解一點:在python中:
x =5之後,我們要了解它的過程:系統先是找了一塊記憶體,將5儲存了進去,緊接著x指向了當前的這塊記憶體
預測1: python下的變數是一個指標
- >>> x = 4
- >>> y = 5
- >>> print x
- 4
- >>> print y
- 5
- >>> id(x)
- 10413988
- >>> id(y)
- 10413976
- >>> x = y
- >>> id(x)
- 10413976
- >>> id(y)
- 10413976
- >>>
從上面我們可以看到:
x = 4 說明x指向了記憶體中儲存為4的那個地址,那個地址是10413988
y = 5 說明y指向了記憶體中儲存為5的那個地址,那個地址是10413976
也就是說在執行x = 4,y = 5之後,x,y分別指向了不同的地址,當執行 x = y之後:
也就是說,x指向了y所指向的記憶體了,這裡我們知道,它們都指向同一塊記憶體
哈哈,原來跟c裡面的指標真的一樣哎!!!哈哈哈
(但是,但是,但是 :就這些嗎??)
- >>> x = 4
- >>> print x
- 4
- >>> id(x)
- 10413988
- >>> x = 5
- >>> print x
- 5
- >>> id(x)
- 10413976
- >>>
好,我們大家接著看:
也就是說:開始的時候,x指向了10413988這塊記憶體,裡面儲存的是4
當執行了x = 5之後,也就變成了這樣:
好,ok就是這樣了,
不知道大家注意到了嗎?
在python中,一開始初始化儲存在記憶體的東西是不可以更改的,我們所能更改的只是它的指向,
但是,但是,在c中,對於int x= 4; 也就是說x的地址是定的,裡面儲存的東西可以更改
我們大家再看一下執行結果:
不知道大家注意到了嗎?
在python中,一開始初始化儲存在記憶體的東西是不可以更改的,我們所能更改的只是它的指向,
但是,但是,在c中,對於int x= 4; 也就是說x的地址是定的,裡面儲存的東西可以更改
- #include <stdio.h>
- int main(){
- int x = 4;
- printf("%p %d\n", &x, x);
- x = 5;
- printf("%p %d\n", &x, x);
- return 0;
- }
從上面可以看到,地址並沒有變,好了,這一點,python和c的區別較大,希望大家注意。
二: 記憶體大小
我們來看一下這樣的程式碼:
- >>> x = 6
- >>> id(x)
- 10413964
- >>> y = 7
- >>> id(y)
- 10413952
- >>> z = 8
- >>> id(z)
- 10413940
- >>>
10413964
10413952
10413940
所以我們大膽推測,python中應該給這些整數的位元組有可能就是12(哈哈,純屬個人推測)
有可能記憶體中就是這樣了的:
哈哈,也該就是這樣子了,
至於其他的大小,有興趣的朋友可以研究研究
三:python記憶體
是不是說:在python中,系統將每一個值都放在了一個固定的位置,不然為什麼,每一次探究記憶體地址的時候,結果都是一樣的(數值相等,地址也相等)
- >>> x = 4
- >>> y = 5
- >>> id(x)
- 10413988
- >>> id(y)
- 10413976
- >>>
那麼下面這個如何解釋:
- >>> x = 4
- >>> y = 6
- >>> id(x)
- 10413988
- >>> id(y)
- 10413964
- >>>
我們再來看:
- >>> x = 4
- >>> y = 6
- >>> id(x)
- 10413988
- >>> id(y)
- 10413964
- >>> z = 5
- >>> id(z)
- 10413976
- >>>
也就是說:python中,系統還是python本身為其分配記憶體的時候就已經根據這個值是多少,確定了記憶體的位置了。。。
相關文章
- 【CDB】怎樣修改PDB的記憶體引數記憶體
- AI晶片需要怎樣的記憶體?AI晶片記憶體
- linq 查詢的結果會開闢新的記憶體嗎?記憶體
- 變數、作用域與記憶體變數記憶體
- 指標:存放記憶體地址的變數指標記憶體變數
- iOS底層原理(一):OC物件實際佔用記憶體與開闢記憶體關係iOS物件記憶體
- 陣列在記憶體中的變化陣列記憶體
- 3 python的數值在記憶體中如何儲存Python記憶體
- malloc,calloc,realloc及動態開闢記憶體常見錯誤記憶體
- 【Mysql 學習】Mysql 怎樣使用記憶體MySql記憶體
- C++ 類的記憶體分配是怎麼樣的?C++記憶體
- Golang併發之共享記憶體變數Golang記憶體變數
- 變數、作用域和記憶體問題變數記憶體
- 程式程式碼,常量,區域性變數,全域性變數在記憶體中的儲存位置變數記憶體
- shell特定變數和Makefile中自動化變數的對比記憶變數
- JS中的棧記憶體、堆記憶體JS記憶體
- JS高階(2)—— 資料 變數 記憶體JS變數記憶體
- 詳解 JS 變數、作用域及記憶體JS變數記憶體
- JavaScript 變數、作用域及記憶體詳解JavaScript變數記憶體
- javascript:變數、作用域和記憶體問題JavaScript變數記憶體
- javascript變數、作用域和記憶體問題......JavaScript變數記憶體
- iOS全域性變數與屬性的記憶體管理iOS變數記憶體
- Python中怎樣改變集合之間的關係?Python
- 如何動態地呼叫沒有引用的其他程式的記憶體變數資料的樣例?記憶體變數
- Python 中的變數還能這樣理解(白話)Python變數
- 在 4GB 實體記憶體的機器上,申請 8G 記憶體會怎麼樣?記憶體
- python的記憶體管理Python記憶體
- JavaScript變數,資料和記憶體的相關問題JavaScript變數記憶體
- Java記憶體模型的主要目的是定義程式中各種變數Java記憶體模型變數
- 小數在記憶體中是如何儲存的?記憶體
- Oracle 10g中,記憶體引數Oracle 10g記憶體
- win10怎樣刪虛擬記憶體_Win10虛擬記憶體如何關閉Win10記憶體
- 什麼是Java記憶體模型(JMM)中的主記憶體和本地記憶體?Java記憶體模型
- 記憶體尋夢環遊記:一個變數的三重死亡記憶體變數
- STM32 記憶體分配解析及變數的儲存位置記憶體變數
- block沒那麼難(二):block和變數的記憶體管理BloC變數記憶體
- 增加一個判斷記憶體變數存在的函式 (轉)記憶體變數函式
- 第4章 變數、作用域和記憶體問題變數記憶體