变量的前世今生

前言

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

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

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

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

变量的定义

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

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

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

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

变量的前世今生_第1张图片
image

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

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

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

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

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

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

变量的前世今生_第2张图片
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这段话的时候,程序已经运行完毕了,我的意识也渐渐迷失,身体被被撵得粉碎。。。

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

变量的前世今生_第3张图片
image

你可能感兴趣的:(变量的前世今生)