IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python中可变数据类型和不可变数据类型的区别 -> 正文阅读

[Python知识库]Python中可变数据类型和不可变数据类型的区别

前言

在python当中,我们经常处理的数据主要分为两类:可变数据类型(列表、字典)和不可变数据类型(字符串、元组)。而这两种数据类型在处理和参数传递过程当中,有着一些常常被忽略的特性。


实例理解

1.1 不可变数据类型

先附上一段代码,大家仔细想想最后的输出结果是多少?

a_str="hello python"
b_str=a_str     # 将a_str的值赋给b_str
print(b_str)    # 输出b_str

a_str="hello DL_ZovX"        # 给a_str赋新值
print("a_str:\t",a_str)   #输出
print("b_str:\t",b_str)   # 输出

想一下,最后的a_str和b_str分别是多少?小伙伴们可以自己动手敲一下代码,看看是否和自己大答案一致。

最终的答案如下:

------------------------------------------------------------
hello python
a_str:	 hello DL_ZovX
b_str:	 hello python

我们还可以查看一下这两个变量的id地址:

print("a_str的id:\t",id(a_str))
print("b_str的id:\t",id(b_str))
--------------------------------------------------------------
a_str的id:	 1677338433968
b_str的id:	 1677338433840

? ? ? ?运行显示,两个变量的内存地址已经不同,这是因为字符串类型的变量是不可变数据类型,所以当它进行第二次赋值时,将会创建一个新的地址空间,并让a_str这个变量指向新的地址空间。

下面是一张思维导图,方便理解。

?b_str=a_str?

这个语句其实就是创建了一个新的变量名b_str,并把它指向a_str所指向的地址空间。

1.2 可变数据类型

上面的例子是不可变数据类型,如何是可变数据类型,结果将是怎么样呢?

先上一段代码:

list1=[1,2,3]
list2=list1    # 将list1的值赋给list2
print("改变前")
print(list2)   # 输出

print("---------------------------------")

list1[0]=2     # 将list1的第一个元素重新赋值为2

print("改变后")
print("list1:\t",list1)   # 输出
print("list2:\t",list2)   # 输出

感兴趣的小伙伴,还可以继续敲一下代码,看一下运行结果是否和自己想象的一样。

我这里就直接公布答案了!

改变前
[1, 2, 3]
---------------------------------
改变后
list1:	 [2, 2, 3]
list2:	 [2, 2, 3]

? ? ? ?这里我们发现,当我们改变 list1 的第一个元素的值后,list2的值也跟着变了。这是因为列表是可变数据类型,当我们去修改其中某一个元素的值时,并不会创建一个新的列表(内存地址),可以理解成只是吧原先内存地址存的数据修改了,这就是可变数据类型和不可变数据类型的显著区别。

我们可以查看一下修改前后,列表的id值。

list1=[1,2,3]
list2=list1    # 将list1的值赋给list2
print("改变前")
print(list2)   # 输出
print("list1的id:\t",id(list1))
print("list2的id:\t",id(list2))

print("---------------------------------")

list1[0]=2     # 将list1的第一个元素重新赋值为2

print("改变后")
print("list1:\t",list1)   # 输出
print("list2:\t",list2)   # 输出
print("list1的id:\t",id(list1))
print("list2的id:\t",id(list2))

结果如下:

改变前
[1, 2, 3]
list1的id:	 2656538548096
list2的id:	 2656538548096
---------------------------------
改变后
list1:	 [2, 2, 3]
list2:	 [2, 2, 3]
list1的id:	 2656538548096
list2的id:	 2656538548096

? ? 我们发现 list1 和 list2 的id值均为 2656538548096,所以并没有创建新的内存地址,list1和list2两个变量名还是指向同一块内存地址(理解)。

?


总结

? ? ? ? 在我们的日常使用中,应当要多注意可变数据类型和不可变数据类型的区别,以防出现一些不易察觉的BUG。

? ? ? ?后续还会更新一些自己在学习过程中,觉得重要的一些知识点!!!

? ? ? 如何觉得这篇分享帮助了你,就动动小手来波三连吧!!!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 21:45:13  更:2021-08-07 21:45:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 14:45:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码