前言
我叫Teemo搭幻,是一個變量咧擂,一出生就受到萬千寵愛。
今年檀蹋,我18歲了松申,爸媽讓我自己去闖蕩一下。
我來到一個叫計算機(jī)的地方俯逾,這里有個老大哥贸桶,人們都叫他“胖mao”。
他是一塊內(nèi)存桌肴,待人溫和皇筛,謙遜有禮,有著不符年齡的穩(wěn)重坠七。
變量的定義
胖mao:“hi水醋,teemo。程序猿開始定義變量了彪置,快來我這里”拄踪。
緊接著,胖mao又道:“這就是變量拳魁,變量一般由三部分組成惶桐, 變量名,等號,變量值”
# a (變量名) = '少杰真帥' (變量值)# 變量只有通過 = 來賦值才會創(chuàng)建
>>> a = "少杰真帥"
隨后胖mao分配了一塊空間給我姚糊。2265700801368
是這塊空間的內(nèi)存(手機(jī))贿衍,a
是這塊內(nèi)存的地址(手機(jī)號)
胖mao不屑的道:“哦,愚蠢的程序員救恨。又開始查看內(nèi)存地址了贸辈,把你的內(nèi)存地址給他吧”
>>> a = "少杰真帥"
>>> print(id(a))
2265700801368
我疑惑的問:“胖mao,胖mao忿薇,程序員哪怎么調(diào)用變量的呢裙椭?”
胖mao微微一笑道:“上面我們已經(jīng)知道了變量定義的過程。調(diào)用的時候署浩,十分簡單,只需要拿著手機(jī)號(變量名)去撥打這個手機(jī)(內(nèi)存地址)扫尺,就可以拿到手機(jī)里面的信息”
>>> a = "少杰真帥" # 分配手機(jī)筋栋,記錄手機(jī)號
>>> print(a) # 通過手機(jī)號拿到手機(jī)里面的數(shù)據(jù)少杰真帥
一臉茫然的我:“哦哦,這樣子啊正驻,我明白了”
變量的類型
變量在內(nèi)存地址中有多種數(shù)據(jù)類型弊攘。最常見的有以下幾種。
- Numbers(數(shù)字)
- int 整形
- float 浮點型
- String(字符串)
- List(列表)
- Tuple(元組)
- Dictionary(字典)
- Boolean (布爾)
其中又分為可變類型和不可變類型姑曙〗蠼唬可變類型List
和Dictionary
,不可變類型Numbers
,String
,Tuple
,Boolean
伤靠。
好奇的我:“胖mao大哥捣域,可變類型和不可變類型的內(nèi)存地址(手機(jī))有什么區(qū)別嗎”
胖貓道:“Good question,首先我們來看一個例子”
# a和b值相同宴合,并且a和b指向了同一個內(nèi)存地址
>>> a = '少杰真帥
>>> b = '少杰真帥'
>>> print(id(a))
2167593736152
>>> print(id(b))
2167593736152
胖mao認(rèn)真的道:“看到了嗎焕梅,小teemo。
在不可變類型的變量中卦洽,兩個相同的變量會指向同一個內(nèi)存地址(或者說一個手機(jī)有2個手機(jī)號)贞言,就等同于b=a”
# 先定義a,再將a賦值給b阀蒂,所以b就指向了a的內(nèi)存地址
a = '少杰真帥'
b = a
我若有所思:“可變的類型中该窗,兩個變量值相同的變量,是不是沒有指向同一個內(nèi)存地址”
胖mao欣慰的道:“對的蚤霞,沒錯”, 心里嘆了口氣酗失,唉,這傻孩子終于開竅了争便,不容易啊级零。
# a和b值相同,但是a和b指向了不同的內(nèi)存地址
>>> a = {}
>>> b = {}
>>> print(id(a))
1788554560712
>>> print(id(b))
1788555064808
變量的實戰(zhàn)
胖毛:“我有個侄女叫陳懟懟。
今年18歲奏纪,身高155cm鉴嗤,體重50kg,喜歡的食物是粉皮序调,愛好唱醉锅,跳,rap发绢,籃球硬耍,夢想是嫁一個有6.6w彩禮的男人
你現(xiàn)在用變量來記錄一下的她的信息”。
通過分析边酒,我們可以得到陳懟懟的信息经柴。
name = '陳懟懟' # str
age = 18 # int
sex = True # 是女性
height = 1.55 # float
weight = 50 # int
food = '粉皮' # str
hobby = ['唱','跳', 'rap', '籃球'] # list
dream = '嫁一個有6.6w彩禮的男人' # str
變量的引用和銷毀
2019年6月11號,這是我呆在計算機(jī)的最后一天墩朦,明天我就要回家了坯认。
胖mao優(yōu)雅喝了一口AD鈣,運行了程序氓涣,緩緩道:”早啊牛哺,teemo。 你現(xiàn)在明白了變量的創(chuàng)建劳吠,哪你知道變量是怎么銷毀的嗎引润?“
”什么?銷毀痒玩,變量怎么可能會銷毀淳附?這絕對不可能!“
胖mao呵呵一笑:”我就知道你不會相信的凰荚,我這可憐的小teemo燃观。“
a = 'shaojie' # 引用指數(shù) 1
b = 'shaojie' # 引用指數(shù)+1
c = a
print(id(a))
print(id(b))
print(id(c))
out: 2663853149064
out: 2663853149064
out: 2663853149064
”前面你已經(jīng)知道便瑟,在不可變類型的變量中缆毁,兩個相同的變量會指向同一個內(nèi)存地址。實際上這就是對內(nèi)存地址的引用到涂,每賦值一次脊框,內(nèi)存的引用指數(shù)就會加一。“
a = {} # 引用a指數(shù) 1
b = {} # 引用b指數(shù) 1
c = a # 引用a指數(shù) +1
print(id(a))
print(id(b))
print(id(c))
out: 1694625991128
out: 1694625991200
out: 1694625991128
# 第二次執(zhí)行
out: 1694625991599
out: 1694625991300
out: 1694625991599
"在可變的類型中践啄,兩個變量值相同的變量浇雹,不會指向同一個內(nèi)存地址。 只有將之前的變量賦值給其他變量的時候屿讽,引用指數(shù)才會增加昭灵。“
胖mao緩了緩說道:”變量每執(zhí)行一次吠裆,它的引用指數(shù)就會少1,當(dāng)引用指數(shù)為0烂完,變量就會從內(nèi)存中銷毀试疙,哈哈哈】衮迹“
當(dāng)我聽到胖mao這段話的時候祝旷,程序已經(jīng)運行完畢了,我的意識也漸漸迷失嘶窄,身體被被攆得粉碎怀跛。。柄冲。
”唉吻谋,其實...... 我是個女人∠趾幔“