美文网首页
Day034|如何理解可变数据类型与不可变数据类型

Day034|如何理解可变数据类型与不可变数据类型

作者: 龙渊的宝藏 | 来源:发表于2021-03-29 23:15 被阅读0次

    今天是Andy学Python的第34 天哦! 

    大家好,我是Andy。

    01.

    列表与字典属可变数据类型

    首先观察上面这张图片。

    定义一个变量a,并将列表 ['aaa', 'bbb', 'ccc', 'ddd']赋值给a。

    定义一个变量b,将变量a赋值给b。

    通过输出列表a、列表b及其ID,可以发现两个列表值与ID是一样的。

    接下来,列表a插入第3个值“kkk”,列表b在最后插入“zzz”。

    输出结果显示,两个列表值与ID还是一样的。

    但是这并不是我们想要的,我们希望列表a、b输出如下结果:

    ['aaa', 'bbb', 'ccc', 'kkk', 'ddd']

    ['aaa', 'bbb', 'ccc', 'ddd', 'zzz']

    WHY?

    再来看下面这张图片。

    定义一个变量a,并将字典{"a":1, "b":2, "c":3, "d":4}赋值给a。

    定义一个变量b,将变量a赋值给b。

    通过输出字典a、字典b及其ID,我们发现两个字典值与ID其实是一样的。

    接下来,字典b更新键”d”值为100。

    输出结果显示,字典a、字典b及其ID,两个字典值与ID还是一样的。

    但是这并不是我们想要的,我们希望字典a、b输出如下结果:

    {'a': 1, 'b': 2, 'c': 3, 'd': 4}

    {'a': 1, 'b': 2, 'c': 3, 'd': 100}

    WHY? 

    书上解释:

    变量不直接保存列表值,它们保存对列表的“引用”。在复制变量或将列表作为函数调用的参数时,这一点很重要。因为被复制的只是列表引用,所以要注意,对该列表的所有改动都可能影响到程序中的其他变量。如果需要对一个变量中的列表修改,同时不修改原来的列表,就可以用copy()和deepcopy()。

    ——出自《Python编程快速上手——让繁琐工作自动化》P78

    个人理解:

    列表与字典都属于可变数据类型,或称数据结构、数据容器。将列表或字典赋值给变量,是将其地址引用给变量。变量就像一个盒子,里面装的是该列表或字典的引用地址。而作为可变数据结构,列表或字典的地址保存的是容器的地址,至于容器里的东西多一件少一件,无所谓,只要容器还在,地址就没变。所有“引用”该可变数据容器的地址的操作,都会影响数据容器里的东西,但不会改变容器的地址(不能将变量直接删除,仅针对列表、字典的方法)。

    不知道我这样讲,你是否明白。不明白的话,可以私信。

    02.

    数值、字符串、元组属不可变数据类型

    原文:

    变量包含对列表值的引用,而不是列表值本身。但对于字符串和整数值,变量就包含了字符串或整数值。在变量必须保存可变数据类型的值时,例如列表或字典,Python就使用引用。对于不可变的数据类型的值,例如字符串、整型或元组,Python 变量就保存值本身。

    ——出自《Python编程快速上手——让繁琐工作自动化》P76

    个人理解:

    这个解释我不认可。我觉得变量对字符串、数值或元组也是引用。只不过字符串、数值或元组作为不可变的数据类型,重新赋值、操作,会生成新的“值”并将其新的地址引用或映射给变量。如果原变量无重新赋值或其他操作,其“值”不变,ID也不变。

    验证如下:

    将元组(1,2,3,4,5)同时赋值给变量a、b、c。

    分别对变量a、b进行操作,变量c不作改动,输出三个变量的值及其ID进行验证。

    说明我的解释是说得通的!

    51Day Day up!

    向上向善,日进一步!

    每天学习,努力成长!

    定个小目标,开启成长的旅程,遇见更好的自己。

    这是我们和自己的约定,许诺自己不负韶华。

    路虽远,行则将至;事虽难,做则必成。

    成长的最好时机,就是当下。

    相关文章

      网友评论

          本文标题:Day034|如何理解可变数据类型与不可变数据类型

          本文链接:https://www.haomeiwen.com/subject/bwdkhltx.html