【Python面试】 说说Python可变与不可变数据类型?

公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。

废话不多说,开始今天的题目:

问:说说Python可变与不可变数据类型的区别?

答:Python中看可变与不可变数据类型,主要是看变量所指向的内存地址处的值是否会改变 。 Python 的六种标准数据类型:数字、字符串、列表、元组、字典、集合。

不可变数据(3个):Number(数字)、String(字符串)、Tuple(元组)。

可变数据(3个):List(列表)、Dictionary(字典)、Set(集合)。

下面分别来说说这两者的具体区别:

1、可变数据类型

可变数据类型:变量所指向的内存地址处的值是可以被改变的

本文例子参考如下链接:

https://www.cnblogs.com/big-devil/p/7625898.html

使用可变数据类型中的列表 list 为例:

>>> a = [1, 2, 3]
>>> id(a)
41568816  
>>> a = [1, 2, 3]
>>> id(a)
41575088  
>>> a.append(4)
>>> id(a)
41575088  
>>> a += [2]
>>> id(a)
41575088  
>>> a
[1, 2, 3, 4, 2]

从上面的程序中可以看出,进行两次a = [1, 2, 3]操作,两次a引用的地址值是不同的,也就是说其实创建了两个不同的对象,这一点明显不同于不可变数据类型,所以对于可变数据类型来说,具有同样值的对象是不同的对象,即在内存中保存了多个同样值的对象,地址值不同。
接着我们对列表进行添加操作,分别a.append(4)和a += [2],发现这两个操作使得a引用的对象值变成了上面的最终结果,但是a引用的地址依旧是41575088,也就是说对a进行的操作不会改变a引用的地址值,只是在地址后面又扩充了新的地址,改变了地址里面存放的值。
所以可变数据类型的意思就是说对一个变量进行操作时,其值是可变的,值的变化并不会引起新建对象,即地址是不会变的,只是地址中的内容变化了或者地址得到了扩充。

图1 python可变数据类型分析

2、不可变数据类型

不可变数据类型:变量所指向的内存地址处的值是不可以被改变。

使用不可变数据类型中的 int 为例:

>>> x = 1  
>>> id(x)
31106520  
>>> y = 1  
>>> id(y)
31106520  
>>> x = 2  
>>> id(x)
31106508  
>>> y = 2  
>>> id(y)
31106508  
>>> z = y
>>> id(z)
31106508  
>>> x += 2  
>>> id(x)
31106484
上面这段程序,我们先来看x = 1和y = 1两个操作的结果,从上面的输出可以看到x和y在此时的地址值是一样的,也就是说x和y其实是引用了同一个对象,也就是说内存中对于1只占用了一个地址,而不管有多少个引用指向了它,都只有一个地址值,只是有一个引用计数会记录指向这个地址的引用到底有几个而已。
当我们进行x = 2赋值时,发现x的地址值变了,虽然还是x这个引用,但是其地址值却变化了,后面的y = 2以及z = y,使得x、y和z都引用了同一个对象,即2,所以地址值都是一样的。
当x和y都被赋值2后,1这个对象已经没有引用指向它了,所以1这个对象占用的内存,即31106520地址要被“垃圾回收”,即1这个对象在内存中已经不存在了。最后,x进行了加2的操作,所以创建了新的对象4,x引用了这个新的对象,而不再引用2这个对象。

图2 python不可变数据类型分析

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1、谈谈对 Python 和其他语言的区别?

2、谈谈对 Python3 和 Python2 的区别?

3、Python 的特点和优点是什么?

4、说说Python解释器种类以及特点?

5、说说4种常用编码的区别?

6、说说Python面向对象三大特性?

7、说说Python中有几种数据类型?

8、说说Python中xrange和range的区别?

9、说说Python变量、函数、类的命名规则?

关注小猿公众号,每天学习一道题

(0)

相关推荐

  • 你学习 Python 的时候,用到舒服姿势了么?

    你在学习和使用 Python 的时候,可能会遇到这么些情况: 刚学 Python 语句的时候,不知道它的运行原理是怎样的? 报错了一顿重启,能跑就行? 学习知识点的时候,没有「做好姿势」? 要不我们来 ...

  • Python中的引用赋值,深拷贝,浅拷贝

    摘要:Python,引用赋值,深拷贝,浅拷贝 总结一下Python中的变量的引用赋值,深拷贝和浅拷贝,先上结论 赋值引用会直接将内存地址传递过去,此时变量间不仅值相等,内存地址也相等,是同一个对象. ...

  • Interview:算法岗位面试—10.11下午—上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点、python的可变不可变的数据类型、赋值浅拷贝深拷贝区别

    ML岗位面试:10.11下午-上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点.python的可变不可变的数据类型.赋值浅拷贝深拷贝区别Interview:算法岗位面 ...

  • Python新式类和经典类的区别?Python入门

    今天,小编为大家总结了一批有关于Python的企业面试题,希望能够给找工作的你们带来一点帮助. Python新式类和经典类的区别? A.在Python里凡是继承了object的类,都是新式类 B.Py ...

  • 什么是lambda函数?有什么好处?

    学Python找工作,除了自身技术硬之外,还需要掌握各种各样的面试技巧,比如说面试题,它可以更好地帮助我们提高面试成功率.本篇文章,小编为大家总结了10道Python经典面试题,希望对你有所帮助. 什 ...

  • Python中可变对象和不可变对象的差异?

    众所周知,在Python中,万物皆对象.当然,Python也分为可变对象和不可变对象,那么你知道Python中可变对象和不可变对象的区别吗?我们来看看详细内容介绍. 不可变对象.该对象所指向的内存中的 ...

  • Python编程基础:序列类型概述

    https://m.toutiao.com/is/eYtBNf7/ 序列首先是一种数据存储方式,用来存储一系列的数据.序列存储数据的主要特点就是数据在内存空间中是连续存储的,例如字符串abc(字符串属 ...

  • 面试题-python 浅拷贝和深拷贝(copy模块)

    前言 面试的时候经常会问到深拷贝和浅拷贝,那么python的深拷贝和浅拷贝有什么区别呢? 思考题 先来看 2 个简单的案例, 对元素 a/aa 重新赋值一个新的变量 b/bb 后,改变原来 a/aa ...

  • 【Python面试】 Python 的特点和优点是什么?

    最近公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开 ...

  • 245道Python面试真题!

    文章 高富帅程序员 最近搜罗了网上的各种面试题,现在做成了 PDF 版本的<Python面试大全>,涵盖了Python基础.Python高级部分.Python语言特性.操作系统.数据库.网 ...

  • Python面试1-65题汇总,都是常问的面试题!

    周末,Python面试题每日一题暂停更新,下面把最近整理的1-50篇Python面试文整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于Python感兴趣的,建议可以认真阅读 ...

  • 【Python面试】 列举Python中的标准异常类?

    最近公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开 ...

  • 【Python面试】 说说Python模块主要分哪三类?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • 说说公众号新开的Python面试专栏

    最近公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 这十天,通过整理这些Py ...

  • 【Python面试】 说说Python中pass的作用?

    最近公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开 ...

  • 【Python面试】 说说Python变量、函数、类的命名规则?

    最近公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开 ...

  • 【Python面试】 说说Python中xrange和range的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...