首页手机python对象属性和方法 python对象属性赋值

python对象属性和方法 python对象属性赋值

圆圆2025-07-15 00:00:44次浏览条评论

Python对象引用、可变性与列表递归行为深度解析论文探讨研究Python中变量赋值、列表操作的背后内存,重点阐述了变量与不变量数据类型的概念,以及对象引用(指针)的工作原理。通过实际代码示例,详细解析列表别名(别名)现象,特别是当列表相互引用时如何形成网络结构,并解释了这种行为对Python数据模型的影响,帮助读者理解Python数据模型的核心。 1. Python数据模型基础:可变性与不可变性

在python中,所有数据都是对象。每个对象在内存中都有一个唯一的标识符(id),可以通过内置的id()函数获取。理解对象的“可变性”(mutable)和“不可变性”(immutable)是理解python中变量赋值和对象引用的关键。不可变数据类型:一旦创建,值就不能被修改。如果尝试“修改”一个不变量对象,Python实际上会创建一个新的对象,并让变量指向这个新对象。常见的不可变类型包括:Digital(int,float,其可变数据类型:创建后,值可以在不改变内存地址的情况下被修改。可变类型包括:列表(list)、字典(dict)、集合(set)。

我们通过 id() 函数来验证这一点:1.1 字符串(不可变其类型)示例# 初始化一个字符串并打印其IDsome_str = quot;Helloquot;print(quot;变量值:quot;, some_str)print(quot;变量ID:quot;, id(some_str))print(quot;-quot; * 20)# 字符串并再次修改打印其IDsome_str = quot;Worldquot; # 外观是修改,实则创建新对象 print(quot;变量值:quot;, some_str)print(quot;变量ID:quot;, id(some_str))print(quot;-quot; * 20)登录后复制

输出:

立即学习“Python免费学习笔记(深入)”;变量值:Hello变量ID:4457023280--------------------变量值:Hello World变量ID:4458388464--------------------登录复制后输出可以看出,当字符串some_str被“修改”后,它的内存ID发生了变化,这验证了字符串的不可变性:原对象支持,而是创建了一个新对象。1.2 列表(可变类型)示例# 初始化一个列表并打印其IDsome_list = b = a.append(b) # 1.将列表b的追加引用到列表a中print(a)#此时a是和b =:在内存中创建两个独立的列表对象,a和b分别指向它们。a.append(b):Python不会将b的内容复制到a中,而是将b所指向的列表对象的引用添加到a中。现在,a[3]和 b 都指向内存中同一个列表对象。print(a[3][1]):a[3] 就是 b,所以 a[3][1] 表明是 b[1],其值是 5。b.append(a):类似地,Python 将 a 所指向的列表对象的引用添加到 b 的结果。

现在,b[2] 和 a 都指向内存中一个 [1,2,3, ] 列表对象。关键点:此时,a 包含了 b 的引用,而 b 又包含了 a 的引用,形成了循环引用(或称同循环结构)。当打印这些列表时,Python 的 repr() 函数会检测到这种循环,并用 [...] 来表示邻居引用,数组无限打印。print(b[2][1]):b[2]就是a,所以b[2][1]注释是a[1],其值为2。a[3][1] = 6:a[3]指向的是列表b。因此,a[3][1] = 6提示于b[1] = 6。由于列表是可变的,b的第二个元素被修改为6。a[3]和b指向同一个对象,所以修改a[3][1]会立即反映在b此时a变为[1, 2, 3, [4, 6, [...]]],b 相当于 [4, 6, [1, 2, 3, [...]]]。print(a[3][2] is a):a[3] 是 b。a[3][2] 是 b[2]。b[2] 是 a。所以 a[3][2] 就是 a。is 串口检查多个变量是否指向内存中的同一个对象,因此结果为 True。print(b[2][3][2] == a):b[2] 是 a。b[2][3] 是 a[3],即 b。b[2][3][2] 是 a[3][2],即 b[2],那么 a。所以 b[2][3][2] 指向的对象就是 a。== 方便检查两个对象的值是否是,由于它们是同一个对象,其值必然相同,因此结果为 True。4. 总结与注意事项理解引用除值:Python中的变量存储是对象的引用,而不是对象本身的值。意味着当你操作一个变量时,你实际上是在操作它所引用的对象。可变性与交互:可变对象的共享引用可能导致“后果”。当多个变量或数据结构中的元素引用同一个可变对象时,通过任何一个引用该对象的都会影响所有其他引用。间接结构:列表等可变容器这个类型包含对自身的引用,或者通过中间对象形成循环引用,从而创建间接数据结构。Python在这些打印结构时会用 [...] 来表示,数组无限循环。is 与 == 的区别:is 运算符检查两个变量是否引用内存中的同一个对象(即它们的 id() 是否相同)。== 运算符检查两个对象的值是否存在。对于可变对象,理解 is概念非常重要,因为它直接反映了别名现象。

掌握这些核心对于编写健壮、可预测的Python代码至关重要,尤其是在处理复杂数据结构时。如果需要避免别名引起的意外修改,考虑使用浅拷贝(可以list.copy()或 copy.copy())或深复制(copy.deepcopy())来创建对象的独立副本。

以上就是Python对象引用、可变性与列表递归行为深度解析的详细内容,更多请关注乐哥常识网文章相关其他!

Python对象引用
kivy textinput改变输入框颜色 kivy textinput
相关内容
发表评论

游客 回复需填写必要信息