您现在的位置是:亿华云 > 系统运维
Python 面试高频问题:可变数据类型和不可变数据类型的区别
亿华云2025-10-09 03:24:50【系统运维】7人已围观
简介www.ydisp.cn/oss/202207/13/71a7895321c78aa3ae3997ac9f4fc3527a9929.png" style="visibility: visible; w
Python可变数据类型和不可变数据类型是面试一个基础而且重要的考点。简单地说:这里的高频可变和不可变是指当变量改变的时候,数据的问题地址是否会改变!
可变数据类型:如果改变了变量的可变可变值,相当于是数据数据新建了一个对象(即地址会被改变)。
可变数据类型:变量的类型类型值发生变化,但是面试对象的地址不会改变。
不可变数据类型:元组,高频字符串,问题数值。可变可变
可变数据类型:字典,数据数据列表,类型类型集合。
引用
在讲可变数据类型和不可变数据类型之前我们要讲一下引用的面试概念。python变量保存的高频是对象的服务器租用引用,这个引用指向堆内存里的问题对象,在堆中分配的对象分为两类,一类是可变对象,一类是不可变对象。例如:s1="abc"。
其实变量s1 就是对象 abc的引用,s1指向了存储abc的内存地址,如果想看s1的地址值,可以使用函数id,id会把地址值转换成十进制。使用print(id(s1))即可,如下图所示:
不可变数据类型
我们以字符串举例,直接上代码:
s1="abc"
print(id(s1))
s1="xyz"
print(id(s1))输出:
140712532603136
140712532603168从输出结果可见改变字符串类型变量的值,地址也会随之变化。
我们接下来看这个实例,也是面试笔试中经常出的题目。企商汇
#在上面代码基础上,编写如下代码:
s2=s1
print(id(s1))
print(id(s2))输出:
743316570224
743316570224可以看到s2=s1 实际上是s2 和s1都指向了同一个地址。
我们继续,改变s2的值。
s2="def"
print(id(s1))
print(s1)
print(id(s2))
print(s2)输出:
879864758384
xyz
879889887984
def看到这里,我们就能够理解为什么改变了s2 的值并没有影响s1的值。因为s1 和s2指向了不同的地址,所以s1的值并没有被改变!
可变数据类型
我们以列表举例:
l = [1, 2, 3]
print(id(l))
l.remove(1) # 删除元素
print(id(l))
l.append(4) # 增加元素
print(id(l))
l[1] = 8 # 修改元素
print(id(l))输出:
405927907912
405927907912
405927907912
405927907912可以看到对列表进行增删改操作,列表的地址都没有变化,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化。
再看下面这个实例,与前面的字符串赋值实例类似。
l1=[a,b,c]
l2=l1
print(id(l1))
print(id(l2))
l2.append(d)
print("亿华云
很赞哦!(16612)
相关文章
- 3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
- 两地三中心,如何部署奇数个节点?
- 带你了解MySQL数据库小技巧
- 网站域名是如何分类的?顶级域名分类是什么样的?
- cm域名有什么独特之处?新人要了解cm域名哪些?
- 域名的后缀分类都有哪些?域名等级怎么样划分?
- 年后跑路第一战,从 Java 泛型学起!
- Flex 布局中一个不为人知的特性
- 前面这两个步骤都是在本机完成的。到这里还没有涉及真正的域名解析服务器,如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。
- 申请域名申请什么样的域名好?小聚教你申请精品域名方法