前言
我叫Teemo,是一个变量,一出生就受到万千宠爱。
今年,我18岁了,爸妈让我自己去闯荡一下。
我来到一个叫计算机的地方,这里有个老大哥,人们都叫他“胖mao”。
他是一块内存,待人温和,谦逊有礼,有着不符年龄的稳重。
变量的定义
胖mao:“hi,teemo。程序猿开始定义变量了,快来我这里”。
紧接着,胖mao又道:“这就是变量,变量一般由三部分组成, 变量名,等号,变量值”
# a (变量名) = '少杰真帅' (变量值)# 变量只有通过 = 来赋值才会创建
>>> a = "少杰真帅"
随后胖mao分配了一块空间给我。2265700801368
是这块空间的内存(手机),a
是这块内存的地址(手机号)
胖mao不屑的道:“哦,愚蠢的程序员。又开始查看内存地址了,把你的内存地址给他吧”
>>> a = "少杰真帅"
>>> print(id(a))
2265700801368
我疑惑的问:“胖mao,胖mao,程序员哪怎么调用变量的呢?”
胖mao微微一笑道:“上面我们已经知道了变量定义的过程。调用的时候,十分简单,只需要拿着手机号(变量名)去拨打这个手机(内存地址),就可以拿到手机里面的信息”
>>> a = "少杰真帅" # 分配手机,记录手机号
>>> print(a) # 通过手机号拿到手机里面的数据少杰真帅
一脸茫然的我:“哦哦,这样子啊,我明白了”
变量的类型
变量在内存地址中有多种数据类型。最常见的有以下几种。
- Numbers(数字)
- int 整形
- float 浮点型
- String(字符串)
- List(列表)
- Tuple(元组)
- Dictionary(字典)
- Boolean (布尔)
其中又分为可变类型和不可变类型。可变类型List
和Dictionary
,不可变类型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这段话的时候,程序已经运行完毕了,我的意识也渐渐迷失,身体被被撵得粉碎。。。
”唉,其实...... 我是个女人。“