it编程 > 前端脚本 > Python

Python可变与非可变数据类型示例详解

2人参与 2026-03-20 Python

python可变与非可变数据类型

引用变量

在大多数编程语言中,值的传递通常可以分为两种形式“值传递与引用(地址)传递”,但是在python中变量的传递基本上都是引用(地址)传递。

变量在内存底层的存储形式

a = 10

第一步: 在计算机内存中创建一个数值为10(占用一块内存空间)

第二步: 在栈空间中声明一个变量,如a

第三步: 把数值10的内存地址赋予给变量a,形成所谓的"引用关系"

变量的引用关系

使用内置方法id(),其参数就是要显示的变量信息,id(变量名称)查询内存地址

a = 10
print(id(a))

把一个变量赋予给另一个变量

a = 10
b = a
print(id(a))
print(id(b))

运行结果:

说明: 由以上运行结果可知, 当我们把一个变量赋予给另外一个变量时, 其两者指向的内存地址相同. 可知a和b指向了同一块内存空间,原理图如下:

若b =a 以后, 改变了变量a的值, 变量是否会改变呢

a = 10
b = a

a = 100
print(b)  # 10 或 100

print(id(a))
print(id(b))

运行结果:

原理图:

总结:不可变数据类型(数值)在赋值以后, 其中一个值的改变不影响另外一个变量,因为两者指向空间地址不同

可变和非可变数据类型

数据类型

python中一共有7种数据类型: 数值(int整型, float浮点类型) , bool类型(true和false) , 字符串类型(str) , 元组(tuple) , 列表(list[1, 2, 3]) , 字典(dict {key:value}) , 集合(set {1, 2})

将以上7种数值类型分为两大类型:可变类型 和 非可变类型

可变类型:内存一旦固定,其值就不能发生改变

**不可变类型:**内存地址一旦固定,其值是可以发生改变

判断数据类型是可变型还是非可变型

在python中,可变类型与非可变类型主要是通过这个数据类型在内存中的表现形式来进行定义的

可变类型就是在内存中,其内存地址一旦固定,其变量的值是可以发生改变的

a = [1, 2, 3]
print(id(a))

# 向内存中追加新数据
a.append(4)
print(id(a))

运行结果:

原理图:

非可变类型就是在内存中,内存地址一旦固定,其变量的值就没办法发生任何改变了

a = 10
print(id(a))

a = 'hello'
print(id(a))

运行结果:

原理图:

在函数中的应用

可变类型

# 定义一个函数
def func(ls):
    # 在函数内部添加元素
    ls.append('苹果')
    print(fruits)
    # ['草莓', '梨', '香蕉', '西瓜', '苹果']


# 定义一个全局变量
fruits = ['草莓', '梨', '香蕉', '西瓜']
# 调用函数
func(fruits)
# 在全局作用域内打印列表
print(fruits)
# ['草莓', '梨', '香蕉', '西瓜', '苹果']

可变类型在函数中,如果在全局或局部中对可变类型进行增删改操作, 其外部和内部都会受到影响

不可变类型

# 定义一个函数
def func(num):
    num += 1
    print(num) # 11


# 定义一个全局变量
a = 10
# 调用函数
func(a)
# 在全局作用域中打印a
print(a) # 10

不可变类型在函数中,局部和全局的改变对外部和内部都没有任何影响

总结 

到此这篇关于python可变与非可变数据类型的文章就介绍到这了,更多相关python可变与非可变数据类型内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

Python调用Deepseek API的四种常见错误及解决方法

03-20

Python调用DeepSeek API查询ClickHouse的流程步骤

03-20

Python代码实现PDF与Word之间互转

03-20

Python批量实现PDF转换为图片(JPG/PNG)

03-20

python判断图片相似度找出相似的图像问题

03-20

Python JSON库json、simdjson与orjson深度对比

03-20

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论