網(wǎng)站首頁(yè) 編程語言 正文
通過地址獲取變量
類似于C/C++中令一個(gè)指針指向一個(gè)變量的地址,通過解引用可以得到變量的值。
利用ctypes模塊在Python中實(shí)現(xiàn)類似的功能:
import ctypes?
value='hello world' #定義一個(gè)字符串變量
address=id(value) #獲取value的地址,賦給address
get_value=ctypes.cast(address, ctypes.py_object).value #讀取地址中的變量
print(get_value)
得到輸出:
hello world
python的變量是什么?
變量皆指針的簡(jiǎn)單理解
一句話:
萬物皆對(duì)象,變量皆指針
這里簡(jiǎn)單介紹一下指針是什么:
指針起源自c語言,在c語言中,每一塊內(nèi)存(或者是每一段)都存在著一個(gè)單獨(dú)的變量用于標(biāo)識(shí)這一坨內(nèi)存,我們可以通過申請(qǐng)一個(gè)這樣的變量去指向一塊內(nèi)存,自然也可以改變一塊內(nèi)存所屬的這個(gè)變量,這個(gè)變量又叫地址也叫指針。
在c語言中,申請(qǐng)變量a
需要標(biāo)識(shí)變量的類型,因此我們?cè)谧鐾赀@個(gè)申請(qǐng)操作之后,相當(dāng)于同時(shí)申請(qǐng)了一個(gè)int(整數(shù))大小的內(nèi)存和一個(gè)這塊內(nèi)存的地址(&a)
*****而在python中申請(qǐng)變量并不需要單獨(dú)表明申請(qǐng)變量的類型而是直接賦值就行了。
這就是python所獨(dú)有的消除指針概念的方法——直接把變量全換成指針
這就有點(diǎn)像打不過就加入:
因此在python中通過變量申請(qǐng)內(nèi)存空間,本質(zhì)上是申請(qǐng)了一個(gè)地址,這個(gè)地址告訴電腦從那一大塊的內(nèi)存哪兒開始存東西
所以大家很容易發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象,python常見的就是三種類型的變量,而他們的大小上限幾乎就是一樣大的:)
因?yàn)橄鄬?duì)于c語言來說,申請(qǐng)變量本身就限制了變量的最大大小(有叫做內(nèi)存管理),而python給你開了個(gè)門(申請(qǐng)了個(gè)開頭的地址)你想往里塞多少都行(理論上)
但是其實(shí)也是有上限的(為了放置一個(gè)死循環(huán)在一個(gè)變量里就把你整塊內(nèi)存條炸掉)
我們可以通過sys模塊的maxsize函數(shù)來看看支持的最大整數(shù)值:
?
原文鏈接:https://blog.csdn.net/qq_33474442/article/details/85069493
相關(guān)推薦
- 2022-06-21 C++深入探究二階構(gòu)造模式的原理與使用_C 語言
- 2022-05-11 tomcat啟動(dòng)時(shí)提示端口被占用解決辦法
- 2023-04-01 Pytorch中關(guān)于F.normalize計(jì)算理解_python
- 2022-02-04 防止點(diǎn)擊量頁(yè)面刷新增加的簡(jiǎn)單處理方法
- 2022-03-21 詳解C++內(nèi)存的代碼區(qū),全局區(qū),棧區(qū)和堆區(qū)_C 語言
- 2022-06-16 Go基礎(chǔ)教程系列之defer、panic和recover詳解_Golang
- 2023-01-31 C#實(shí)現(xiàn)批量壓縮和解壓縮的示例代碼_C#教程
- 2022-11-12 超詳細(xì)解析C++實(shí)現(xiàn)快速排序算法的方法_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支