python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python对象是否可变

Python变量赋值与引用之对象是否可变详解

作者:牛顿编程

Python的变量赋值是一个复杂的过程,涉及到内存分配、引用计数、数据类型和深浅拷贝等多个方面,这篇文章主要介绍了Python变量赋值与引用之对象是否可变的相关资料,需要的朋友可以参考下

概述

在Python中,变量赋值的机制涉及到对象的引用和对象的可变性。变量名只是对象的引用,而不是直接存储数据。因此,变量ab赋值后的行为差异,取决于两个因素:

1. 不可变对象(Immutable Objects)

不可变对象的值一旦创建,就不能修改其内容,例如:

场景:修改变量的新赋值

a = 5         # a指向整数对象5
b = a         # b也指向同一个整数对象5

a = 6         # 此时a指向新的整数对象6,但b仍指向5

print(b)      # 输出5

原因

场景:尝试直接修改对象内容(无效)

a = "hello"   # a指向字符串"hello"
b = a         # b也指向相同的字符串对象

# 尝试修改字符串内容(但不可变对象不允许此操作)
a[0] = "H"    # 报错:'str' object does not support item assignment

结果:此操作根本无法执行,因为字符串是不可变的。

2. 可变对象(Mutable Objects)

可变对象的值可以在创建后被修改,例如:

场景:直接修改对象内容

a = [1, 2]    # a指向列表[1, 2]
b = a         # b指向同一个列表对象

a.append(3)   # 修改列表内容,原列表变为[1, 2, 3]

print(b)      # 输出[1, 2, 3]

原因

场景:修改变量的引用(不影响对方)

a = [1, 2]
b = a

a = [3, 4]    # a的引用被更新为新列表[3,4],但b仍指向原列表[1,2]

print(b)      # 输出[1, 2]

原因

3. 核心总结

情况行为差异原因
修改对象内容(可变对象)a 和 b 指向同一个对象,修改内容会影响双方。
直接重新赋值变量(任何对象)a 的引用指向新对象,而 b 的引用未变,因此 b 的值不受影响。
尝试修改不可变对象的内容不可变对象无法被修改,只能生成新对象,原对象的引用不会改变。因此 b 不变。

4. 如何避免混淆

若希望二者独立

示例表格

示例代码是否修改对象内容a 的值b 的值
a = 5; b = a; a = 665
a = [1]; b = a; a[0] = 2是(修改可变对象)[2][2]
a = [1]; b = a; a = [2][2][1]
`a = “str”; b = a; a += “1”否(生成新对象)"str1""str"

关键点:

总结 

到此这篇关于Python变量赋值与引用之对象是否可变的文章就介绍到这了,更多相关Python对象是否可变内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文