变量的前世今生

前言

我叫Teemo,是一个变量,一出生就受到万千宠爱。

今年,我18岁了,爸妈让我自己去闯荡一下。

我来到一个叫计算机的地方,这里有个老大哥,人们都叫他“胖mao”。

他是一块内存,待人温和,谦逊有礼,有着不符年龄的稳重。

变量的定义

胖mao:“hi,teemo。程序猿开始定义变量了,快来我这里”。

紧接着,胖mao又道:“这就是变量,变量一般由三部分组成, 变量名,等号,变量值”

# a (变量名) = '少杰真帅' (变量值)# 变量只有通过 = 来赋值才会创建
>>> a = "少杰真帅"

随后胖mao分配了一块空间给我。2265700801368是这块空间的内存(手机),a是这块内存的地址(手机号)

image

胖mao不屑的道:“哦,愚蠢的程序员。又开始查看内存地址了,把你的内存地址给他吧”

>>> a = "少杰真帅"
>>> print(id(a))
2265700801368

我疑惑的问:“胖mao,胖mao,程序员哪怎么调用变量的呢?”

胖mao微微一笑道:“上面我们已经知道了变量定义的过程。调用的时候,十分简单,只需要拿着手机号(变量名)去拨打这个手机(内存地址),就可以拿到手机里面的信息”

>>> a = "少杰真帅" # 分配手机,记录手机号
>>> print(a) # 通过手机号拿到手机里面的数据少杰真帅

一脸茫然的我:“哦哦,这样子啊,我明白了”

image

变量的类型

变量在内存地址中有多种数据类型。最常见的有以下几种。

  • Numbers(数字)
    • int 整形
    • float 浮点型
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Dictionary(字典)
  • Boolean (布尔)

其中又分为可变类型和不可变类型。可变类型ListDictionary,不可变类型Numbers,String,Tuple,Boolean

好奇的我:“胖mao大哥,可变类型和不可变类型的内存地址(手机)有什么区别吗”

胖猫道:“Good question,首先我们来看一个例子”

# a和b值相同,并且a和b指向了同一个内存地址
>>> a = '少杰真帅
>>> b = '少杰真帅'
>>> print(id(a))
2167593736152
>>> print(id(b))
2167593736152

胖mao认真的道:“看到了吗,小teemo。

在不可变类型的变量中,两个相同的变量会指向同一个内存地址(或者说一个手机有2个手机号),就等同于b=a”

# 先定义a,再将a赋值给b,所以b就指向了a的内存地址
a = '少杰真帅'
b = a

我若有所思:“可变的类型中,两个变量值相同的变量,是不是没有指向同一个内存地址

胖mao欣慰的道:“对的,没错”, 心里叹了口气,唉,这傻孩子终于开窍了,不容易啊。

# a和b值相同,但是a和b指向了不同的内存地址
>>> a = {}
>>> b = {}
>>> print(id(a))
1788554560712
>>> print(id(b))
1788555064808

变量的实战

胖毛:“我有个侄女叫陈怼怼。

今年18岁,身高155cm,体重50kg,喜欢的食物是粉皮,爱好唱,跳,rap,篮球,梦想是嫁一个有6.6w彩礼的男人

你现在用变量来记录一下的她的信息”。

通过分析,我们可以得到陈怼怼的信息。

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号,这是我呆在计算机的最后一天,明天我就要回家了。

胖mao优雅喝了一口AD钙,运行了程序,缓缓道:”早啊,teemo。 你现在明白了变量的创建,哪你知道变量是怎么销毁的吗?“

”什么?销毁,变量怎么可能会销毁?这绝对不可能!“

胖mao呵呵一笑:”我就知道你不会相信的,我这可怜的小teemo。“

a = 'shaojie'  # 引用指数 1
b = 'shaojie' # 引用指数+1
c = a
print(id(a))
print(id(b)) 
print(id(c)) 
out: 2663853149064
out: 2663853149064
out: 2663853149064

”前面你已经知道,在不可变类型的变量中,两个相同的变量会指向同一个内存地址。实际上这就是对内存地址的引用,每赋值一次,内存的引用指数就会加一。

a = {} # 引用a指数 1
b = {} # 引用b指数 1
c = a # 引用a指数 +1
print(id(a))
print(id(b))
print(id(c))
out: 1694625991128
out: 1694625991200
out: 1694625991128

# 第二次执行
out: 1694625991599
out: 1694625991300
out: 1694625991599

"在可变的类型中,两个变量值相同的变量,不会指向同一个内存地址。 只有将之前的变量赋值给其他变量的时候,引用指数才会增加。

胖mao缓了缓说道:”变量每执行一次,它的引用指数就会少1,当引用指数为0,变量就会从内存中销毁,哈哈哈。“

当我听到胖mao这段话的时候,程序已经运行完毕了,我的意识也渐渐迷失,身体被被撵得粉碎。。。

”唉,其实...... 我是个女人。“

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342