Python3 中有六个标准的数据类型:
Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
isinstance 和 type 的区别在于:
type()不会认为子类是一种父类类型。
isinstance()会认为子类是一种父类类型。
与Python字符串不一样的是,列表中的元素是可以改变的
虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
tup1 =() # 空元组
tup2= (20,) # 一个元素,需要在元素后添加逗号
Set(集合)
集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:
parame ={value01,value02,...}
或者set(value)
Python身份运算符
身份运算符用于比较两个对象的存储单元
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
>>>a = [1, 2, 3]>>> b =a>>> b isa
True>>> b ==a
True>>> b =a[:]>>> b isa
False>>> b ==a
True
变量在使用前必须先"定义"(即赋予变量一个值),否则会出现错误:
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去,实例如下:
name = 'Runoob'f'Hello {name}'# 替换变量
f'{1+2}'# 使用表达式'3'w= {'name': 'Runoob', 'url': 'www.runoob.com'}
f'{w["name"]}: {w["url"]}'
'Runoob: www.runoob.com'
关于元组是不可变的
>>> tup = ('r', 'u', 'n', 'o', 'o', 'b')>>> tup[0] = 'g'# 不支持修改元素
Traceback (most recent call last):
File"", line 1, in TypeError:'tuple' objectdoes not support item assignment>>>id(tup) # 查看内存地址4440687904
>>> tup = (1,2,3)>>>id(tup)4441088800 # 内存地址不一样了
直接赋值和 copy 的区别
#!/usr/bin/python
#-*- coding: UTF-8 -*-dict1= {'user':'runoob','num':[1,2,3]}
dict2=dict1 # 浅拷贝: 引用对象
dict3=dict1.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
# 修改 data 数据
dict1['user']='root'dict1['num'].remove(1)
# 输出结果
print(dict1)
print(dict2)
print(dict3)
关于可更改与不可更改类型, 以及其它语言的值类型与引用类型的介绍,一直一来感觉都不太严谨, 说法是否正确有待验证。
简单的说就是,不可更改类型传到函数里重新赋值后,两次输出值不一样,而可更改类型传到函数里对对象的"属性" 重新赋值后输出值一样。
这里照搬一下例子:
# 可写函数说明
def changeme( mylist ):"修改传入的列表"mylist.append([1,2,3,4])
print ("函数内取值:", mylist)return# 调用changeme函数
mylist= [10,20,30]
changeme( mylist )
print ("函数外取值:", mylist)
请注意:上面特意用了引号标准的部分,对可变类型或者引用的操作修改的是传过来的对象的属性。
可以这么理解(例子有点随意):我在画画,小明来了说他也要画,我让他和我一起画,他如果和我在同一个画板上画,那么我们两的画就会同时改变。 而如果他说不,我要另外用一块画板,然后重新拿了块画板画起来了,那么我们两的画自然就不一样了。
同理可更改类型 的属性进行操作,这只是对引用的内存块里面的值进行操作,引用并没变,自然所有引用它的对象的值都变了。而对不可更改的对象进行操作,因为它引用的内存块只是对应一个固定的值,不能进行修改,要重新复制实际上就是更新引用。
如果我们运行下面的例子,对可更改类型的引用进行修改,结果就不一样了。
# 可写函数说明
def changeme( mylist ):"修改传入的列表"mylist= [1,2,3,4]
print ("函数内取值:", mylist)return# 调用changeme函数
mylist= [10,20,30]
changeme( mylist )
print ("函数外取值:", mylist)
结果
函数内取值:[1,2,3,4]函数外取值:[10,20,30]
本文链接:https://my.lmcjl.com/post/9577.html
4 评论