Python初学____探究_____(1)可变对象 不可变对象理解

1.  可变对象 & 不可变对象

①对于Python来说,变量=对象 的含义表示着 将该变量作为一个引用绑定到该对象上,当绑定完成后 即可通过变量名使用该对象。 一个对象不存在任何对象引用的时候,就进入了垃圾收集的过程(自动回收机制)。

②对于多元素的数据结构,如list,tuple,dict,其实现是通过指针数组来绑定到目标对象。

1.1可变对象

在Python中的可变对象往往是多元素的数据结构,其大部分都是通过指针数组去绑定到元素对象的多元素可变对象中的可变,是指这个指针数组是可变的(指针数组可扩展缩小,数组元素可修改)

例1:

lt1 = ["sy","wsx","syf",100]

print(id(lt1))

lt1[0] = "wsx"

lt1.append(99)

print(id(lt1))

print(id(lt1[1]))

print(lt1)

在例1中,我们修改lt1[0]="wsx",就是要修改指针数组中 0号指针,使其绑定到值为"wsx"的对象上,由于其之前绑定的"sy"为字符串属于非可变对象,所以其必须舍弃再创建一个"wsx",由于之前内存中已经有了一个"wsx",所以我们让他绑定到这个。所以可以看到id(lt)和id(lt[1])多的结果相同。同理,我们让lt1增加一个元素,由于其是可变对象,直接在数组尾部插入一个元素指向100这个对象即可。

在上述过程中,这些多元素的可变对象的数组指针发生了改变

1.2不可变对象

现在学到的Python不可变对象中,基本可以分为两类:一类是 通过指针数组实现的(如tuple),另一类则是没有通过指针数组实现的

(1)对于tuple这些通过指针数组实现的不可变对象,不可变主要在于其指针数组不可改变

例1:

tup1 = ("syf","wsx","sy",[100])

tup1[3][0]=99

tup1[3].append(0)

print(tup1)

  可以看到tup1为不可变对象,但是最终其tup[3]的元素仍然被修改了,但在这个过程中我们没有修改 tup1指针数组中的指针元素,tup[3]仍指向原来的list。

(2) 另一类则是像类似str,int这样的不可变,其不可变主要体现在 内容不可变。对于采用非数组指针形式的不可变对象,若我们修改时其会直接传创建一个新的目标对象。

i = 73  

i += 2

原文地址:https://www.cnblogs.com/stankangyong/p/8875900.html

时间: 2024-10-09 14:23:30

Python初学____探究_____(1)可变对象 不可变对象理解的相关文章

python 深拷贝和浅拷贝之可变和不可变对象总结

了解深拷贝和浅拷贝之前先要理解可变与不可变对象 python只允许使用引用传递,有可变对象和不可变对象,可变对象:list,dict.不可变对象有:int,string,float,tuple Python int,string,float,tuple不可变举栗子: def int_object(): i = 89 j = 89 print(id(89)) print('i id:' + str(id(i))) print('j id:' + str(id(j))) print(i is j)

python中的可变与不可变对象

Python中的可变对象和不可变对象 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址. 可变对象,该对象所指向的内存中的值可以被改变.变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变. Python中,数值类型(int和float).字符串str.元组tuple都是不可变类

Python中的可变、不可变对象和赋值技巧序列解包

可变对象和不可变对象 在python中一切皆对象.在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址. python中,对象分为可变(mutable)和不可变(immutable)两种类型,元组(tuple).数值型(number).字符串(string)均为不可变对象,而字典型(dictionary)和列表型(list)的对象是可变对象. 不可变对象 见一个例子,分析不可变对象的特点 python内置id()函数,用于返回对象的唯一标识(identity).id()

python深浅copy探究

引入 在python程序中,如果我们操作一个变量的值去做运算,而又想在下次调用时,仍使用原来的变量的值去做运算,那么我们我们就需要将这个变量去做备份,这就是本文所要探究的问题. 开始 变量-对象-引用: python中全部皆对象,Python中变量是指对象(甚至连type其本身都是对象,type对象)的引用,Python是动态类型,程序运行时候,会根据对象的类型来确认变量到底是什么类型. 我们有时候会见到这样一种情况: a = 1 b = a 这样做不就是把数据copy了一份吗,错,这样做只是在

python初学之一:基本数据类型

python的基本数据类型: Integral类型 整形:12 布尔型:True,False(只此两类) 浮点类型 浮点数:1.234 复数:1+2j 字符串:"hello world" CSDN的文章:http://blog.csdn.net/ace_fei/article/details/16967327 1. Python在heap中分配的对象分成两类:可变对象和不可变对象.所谓可变对象是指,对象的内容是可变的,例如list.而不可变的对象则相反,表示其内容不可变. 不可变对象:

zg手册 之 python2.7.7源码分析(2)-- python 的整数对象和字符串对象

python 中的内置对象 python 中常用的内置对象有:整数对象,字符串对象,列表对象,字典对象.这些对象在python中使用最多,所以在实现上提供缓存机制,以提高运行效率. 整数对象 (PyIntObject) python 中的整数对象是不可变对象(immutable),即创建了一个 python 整数对象之后,不能再改变该对象的值. python 为创建整数对象提供了下面三种方法,其中 PyInt_FromString 和 PyInt_FromUnicode 内部也是调用 PyInt

python 初学03 Eric+PyQt+python IDE与界面程序

近期一直在学习python和批处理,来将工作中的手工操作的低效环节用脚本自动实现. 已经实现了几个脚本.但是命令行窗口,总是不太友好,对执行结果的反馈也不清楚,就想实现可视化. 在网上找到Python可视化的编程的一个方法,周末专心实现了一下,效果还行,算是有头绪了. http://blog.sina.com.cn/s/blog_514104fc0101c8yi.html 主要是按照上面这篇博客的方法实现的.感谢作者. 一.环境与软件版本 Eric特别挑软件版本,与PyQt 和 python的版

可变于不可变对象分类

Python在heap中分配的对象分成两类: 可变对象和不可变对象. 所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变. 可变即内存空间可变,不可变即内存空间不可变.这里用 id 函数看对象的内存地址有没有变化. 不可变(immutable):int.字符串(string).float.(数值型number).元组(tuple) 可变(mutable):字典型(dictionary).列表型(list) 如不可变类型例子:  id不变,type不变,值也不变. 从上图可以看出:变

Python学习(七)——可变与不可变参数

下面一段代码演示了可变与不可变默认参数的区别,通过查看内存地址以及每次函数调用之后的默认参数的变化,可以看出两段代码为什么会产生不同的结果. # -*- coding: cp936 -*-  # 上面一句是为了中文编码问题 # 默认值只被赋值一次.这使得当默认值是可变对象时会有所不同,比如列表.字典或者大多数类的实例. # 例如,下面的函数在后续调用过程中会累积(前面)传给它的参数 def f(a,L=[]): print('默认参数地址为:'+str(id(L))) L.append(a) p