python初阶-3(C++/new/new[ ],delete/delete[ ]讲解,以及new/malloc 和 delete//free区别: )

new申请空间分为两步
1.先给对象申请空间
2.然后调用构造函数
底层实现的话,使用的是void * operator new函数
先是调用malloc,然后空间不足的话首先会释放堆上一些不用的资源,然后再次尝试申请空间,
还是不足的话就会自动抛异常
delete 释放空间的话也是分为两步
1.首先调用析构函数释放对象内部的资源
2.释放对象本身的资源
底层实现的话利用的是void * opreator delete函数,内部也是调用free函数
new[]连续申请空间
基本操作和new一致,只是对底层利用循环对new进行连续的调用
delete[ ]
也是一样的道理,利用循环来解决

关于申请空间,每次我们释放的时候,操作系统是如何知道我们所要,释放的空间的大小呢?
就是每次申请空间的时候都会多申请空间,在我们所申请空间的头部增加一个32字节的结构体,然后在我们申请空间的结尾,在增加4个字节,用来最为标记,防止越界,相当于每次申请空间都会多申请36个字节,然后结构体头部是利用双向链表来对,我们申请的空间进行管理的

new/malloc 和 delete//free区别:
1.new/delete是一个操作符,malloc/free是函数
2.new/delete申请自定义类型的对象的时候会调用构造函数/析构函数
3.new申请空间不需要判空,失败会自动抛异常
4.new申请的空间不需要做类型转换,因为申请空间的时候就是利用类型在申请,int * p = new int

使用for循环遍历列表:

name_space = ["今天","天气","好","晴朗"]
# 使用迭代遍历列表,便利的时候需要指定临时变量,类似于下面的my_name,
# 遍历的时候就会把列表里面的元素保存在临时变量里面然后再依次打印出来
for my_name in name_space:
    print(my_name, end="")

元组的介绍,以及元组该如何去定义:

# 元组tuple,意思就是由多个元素组成的序列,与列表类似,但是元组里面的元素是不能修改的
# 元组是使用()定义的,但是列表是使用[ ] 来定义的
info_tuple = ("小明", 18, 17.5)
print(type(info_tuple))  # 查看定义的()类型到底是什么类型的数据,打印发现真的是tuple类型
print(info_tuple[0])  # 查看元组中的元素
# 定义一个空的元组
# 我们知道的元组在定义好之后是不允许被修改的,也就是说我们平时很少去定义空的元组,但是我们必须知道
empty_tuple = ()
# 怎样定义只有一个元素的元组
# 当我们像下面这样定义一个元组的时候,其实我们定义的并不是一个元组,
# 而是一个int类型的数据,那是因为python的解释器会自动把括号拿走,然后只剩下一个5,这样就会被认为定义了一个int类型的数据
single_tuple1 = (5)
# 真正想要定义只有一个元素的元组改怎么做呢?那就要在元组的唯一的一个元素后面跟上一个 ' ,'
single_tuple2 = (5,)

元组的基本操作:

# 元组的自带操作
tuple1 = (1, 2, 5, 6, 3, 4, 7, 8, 9, 0)
print(tuple1.count(2))  # 查看某个元素在元组中出现的次数
print(tuple1.index(0))  # 查看某个元素在元组里所对应的索引号

在python中可以使用for循环遍历所有的非数字类型的变量:列表,元组,字典,以及字符串

# 在日常的工作中其实直接点元组的遍历其实并不多,因为元组中的数据类型都不一致
tuple1 = (1, 2, 5, 6, 3, 4, 7, 8, 9, 0)
for my_tuple in tuple1:
    print(my_tuple,end="")

元组的应用场景:
1.可以作为函数的参数或者返回值,当一个函数需要传递或者返回多个参数的时候,就可以使用元组来进行传递,元组就可以传递任意多个参数
2.格式化字符串,格式化字符串后面的% ( ),( )本质上也就是一个元组
3.让列表不可以被修改,来保证数据的安全
使用元组来拼接字符串:

# 使用元组来拼接一个新的字符串
tuple4 = ("小明", 18, 1.75)
print("我的名字叫%s,今年%d岁,我身高%.2f" % tuple4)
info = "我的名字叫%s,今年%d岁,我身高%.2f" % tuple4
print(info)

元组和列表的相互转换:

# 元组与列表的相互转化
list1 = [1, 2, 3, 4, 5, 6]
tuple5 = ("你还好吗?",123)
new_list = list(tuple5)
print(type(new_list))   # 查看打印信息,元组已经被转换为列表
new_tuple = tuple(list1)
print(type(new_tuple))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值