『Python』可变对象与不变对象

1. 抽象数据类型的操作

  • 构造操作
    这类操作主要是基于一些已知信息,产生这个类的实例对象。类似银行进行开通账户
  • 解析操作
    这类操作是获取对象的一些有用信息,其结果反应了对象的一些特征,但返回的不是对象本身。类似银行查询账户余额
  • 变化操作
    这类操作是修改对象内部的信息和状态。比如一个银行账户进行转账操作

        如果一个类型,具有构造和解析操作,那么这个类型就是不可变类型,这个类型的对象就是不可变对象
        如果一个类型,具有所有的三种操作,这个类型就是可变类型,这个类型的对象就是可变对象。

2. Python对象的基本要素

            id   :身份标识,也就是内存地址
          type :数据类型
         value:值

在Python中,有两个比较相等的运算符,分别是is==

  • ==:用来比较判断两个对象的 value(值)是否相等
  • is: 用来比较判断的是对象间的唯一身份标识是否相等,也就是 id 是否相同
  • Python 中 int 和 string 有小型的的数据池
    • 对于 int,范围为 [-5,256]
    • 对于 string,首先不能有空格,其次最长不超过 20 个字符并且不能有特殊字符。
  • is运算符比==效率高,在变量和 None 进行比较时,应该使用is

3. Python中的可变对象与不可变对象

3.1 不可变对象——数字、字符串、元组

        对象所指向的内存中的值不能被改变,当改变这个变量的时候,原来指向的内存中的值不变,变量不再指向原来的值,而是开辟一块新的内存,变量指向新的内存

	# ==========================
	#     数字,包括布尔变量
	# ==========================
	n = 2
	d1 = id(n)
	n += 2
	d2 = id(n)
	print(d1 == d2)  # False

类似地,字符串,元组也是一样

	# ==========================
	#            字符串
	# ==========================
	s = "I love"
	d1 = id(s)
	s += "you"
	d2 = id(s)
	print(d1 == d2)  # False
	
	# ==========================
	#            元组
	# ==========================
	t = (1,3)
	d1 = id(t)
	t += (4,)
	d2 = id(t)
	print(d1 == d2)  # False

tuple的元素是list时,改变list的元素不影响tuple的id

	l = [1,2]
	t = (1,5,l)
	n1 = id(t)
	l += [3,4]
	n2 = id(t)
	print(n1 == n2)  # True

3.2 可变对象——列表、集合、字典

        对象指向的内存中的值会改变,当更改这个变量的时候,还是指向原来内存中的值,并且在原来的内存值进行原地修改,并没有开辟新的内存。

	l = [1,2]
	d1 = id(l)
	l += [3,4]
	d2 = id(l)
	print(d1 == d2)  # True

4 函数参数

        如果参数是可变对象,则在函数内部更改该对象时,会同时影响到外部的对象,如果参数是不可变对象,无论函数内部如何修改该对象,对外部对象都没有影响,只是让局部变量指向了修改过新创建的对象而已

发布了10 篇原创文章 · 获赞 7 · 访问量 385

猜你喜欢

转载自blog.csdn.net/dreaming_coder/article/details/103621751