暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python对象分类引用复制和比较

原创 梯阅线条 2022-10-06
986

1.1 python对象类型分类

python对象可以分为可变和不可变,并且相同对象类型有共同的操作。

序号对象类型对象分类是否可变
1数字数值
2字符串序列
3列表序列
4字典映射
5元组序列
6文件扩展N/A
7sets集合
8frozenset集合
9bytearray(3.0)序列

python有些对象可以包含任意类型对象,可以任意嵌套,可以迭代遍历。

序号归类对象操作
1序列类型字符串、列表、元组、bytearray共同操作:索引、分片、重复、合并等
2可变对象列表、字典、集合可以原处修改
3不可变对象数字、字符串、元组不能原处修改
4任意嵌套列表、字典、元组包含任意类型对象,任意嵌套
5动态变化列表、字典动态扩大、缩小
6可迭代字符串、列表、字典、元组、文件、集合、bytearray用for循环遍历

1.2 python引用和复制

1.2.1 可变对象的引用

描述

python赋值操作会产生引用,多次赋值相同对象,就会产生相同对象有多个引用。

如果对象是可变对象,那么一处修改,就会导致其他的引用同时被修改。

示例

>>> X=[91,92,93]
>>> L=['梯阅线条',X,'tyxt']
>>> D={'x':X,'y':9555}
>>> X
[91, 92, 93]
>>> L
['梯阅线条', [91, 92, 93], 'tyxt']
>>> D
{'x': [91, 92, 93], 'y': 9555}
>>> D['x']
[91, 92, 93]
>>> D['x'][0]=90
>>> X
[90, 92, 93]
>>> L
['梯阅线条', [90, 92, 93], 'tyxt']
>>> D
{'x': [90, 92, 93], 'y': 9555}

1.2.2 可变对象的复制

描述

如果不想引用的共同对象,被其它引用修改,那么可以使用复制。

序号复制操作
1序列复制L[:]
2字典复制D.copy()

示例

>>> X=[91,92,93]
>>> L=['梯阅线条',X[:],'tyxt']
>>> D={'x':X[:],'y':9555}
>>> X
[91, 92, 93]
>>> L
['梯阅线条', [91, 92, 93], 'tyxt']
>>> D
{'x': [91, 92, 93], 'y': 9555}
>>> D['x'][0]=90
>>> X
[91, 92, 93]
>>> L
['梯阅线条', [91, 92, 93], 'tyxt']
>>> D
{'x': [90, 92, 93], 'y': 9555}
# [:]分片复制序列,copy复制字典
>>> L1=[91,92,93]
>>> D1={'name':'梯阅线条','no':9555}
>>> L=L1[:]
>>> D=D1.copy()
>>> L1
[91, 92, 93]
>>> D1
{'name': '梯阅线条', 'no': 9555}
>>> L
[91, 92, 93]
>>> D
{'name': '梯阅线条', 'no': 9555}
>>> L[0]=90
>>> D['no']=9556
# 修改相互不影响
>>> L1,L
([91, 92, 93], [90, 92, 93])
>>> D1,D
({'name': '梯阅线条', 'no': 9555}, {'name': '梯阅线条', 'no': 9556})


1.2.3 python对象重复

描述

python可变序列对象的重复,有两种,值重复(L*n)和嵌套重复([L]*n)。

示例

>>> L=[1,2,3]
>>> X=L*3
>>> Y=[L]*3
>>> X
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> Y
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> L[0]=0
>>> X
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> Y
[[0, 2, 3], [0, 2, 3], [0, 2, 3]]

1.3 python对象比较和真假值

1.3.1 python对象比较

描述

python对象支持相等性、相对大小的比较,首次差值决定比较结果。

序号操作描述
1==比较值是否相等
2is比较是否通一对象,值和地址

python对象比较方法。

序号对象描述
1数字通过相对大小进行比较
2字符串按顺序一个字符一个字符比较
3列表、元组从左到右对每部分内容进行比较
4字典通过排序后的键值列表比较

示例

>>> L1=[91,('梯阅线条',9555)]
>>> L2=[91,('梯阅线条',9555)]
# == 值比较,is 内存地址比较
>>> L1==L2,L1 is L2
(True, False)
>>> id(L1),id(L2)
(29852736, 29854616)
>>> S1='梯阅线条'
>>> S2='梯阅线条'
# 大字符串 is 不同
>>> S1 == S2,S1 is S2
(True, False)
>>> S1='tyxt'
>>> S2='tyxt'
# 小字符串 is 相同
>>> S1 == S2,S1 is S2
(True, True)
>>> D1={'a':1,'b':2}
>>> D2={'a':1,'b':3}
>>> D1 == D2
False
>>> D1 < D2
Traceback (most recent call last):
 File "<pyshell#55>", line 1, in <module>
   D1 < D2
TypeError: '<' not supported between instances of 'dict' and 'dict'
>>> list(D1.items()),sorted(D1.items())
([('a', 1), ('b', 2)], [('a', 1), ('b', 2)])
# python3的字典比较,通过内置sorted()和items()进行
>>> sorted(D1.items()) < sorted(D2.items())
True
>>> sorted(D1.items()) > sorted(D2.items())
False

1.3.2 python对象真假值

描述

python对象不是真就是假。python通过if X:语句判断对象真假。

序号对象描述
1数字对象非0为真
2其他对象非空为真
3‘梯阅线条’True
4‘’False
5[]False
6{}False
71True
80.0False
9NoneFalse

示例

>>> X='梯阅线条'
>>> if X:
   print(X)

   
梯阅线条

1.3.3 python的None对象

描述

python的None对象,用做初始值,起占位左右。

比如,列表超出长度的索引是无法赋值的,需要预先分配长度,但是值未知,此时可以用None做初始值,做站位使用。

示例

>>> S=None
>>> L=[None]*10
>>> S
>>> L
[None, None, None, None, None, None, None, None, None, None]

1.3.4 python的bool类型

1.3.4.1 bool()

描述

python的bool()内置函数,判断入参是否为True。

示例

>>> bool(1),bool(0),bool(None)
(True, False, False)
>>> bool('tyxt'),bool('')
(True, False)
>>> bool({}),bool([])
(False, False)

版权声明©

本文首发微信公众号:梯阅线条

原创不易,转载请注明出处。

更多内容参考python学习笔记或软件测试开发目录。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论