python列表遍历 空列表_python列表list和遍历的一个疑问

不知道你是对你这个算法产生了疑问还是对各种数据类型在内存中如何存储不懂而产生的疑问。

关于算法:

这个程序相当于是遍历列表a,每次取出a的最后一个元素,再将这个元素插入到a的第一个位置。而且你完整循环一次a的内容当然还是跟最开始是一样的撒。

这就有点像你有一篮子按顺序排好的鸡蛋,然后把鸡蛋一个一个按顺序拿出来,然后再一个一个按顺序放回篮子里。

每次都是将最后一个鸡蛋拿出来,然后将篮子里剩下的鸡蛋不改变顺序的都朝后摞一个位置,然后再将拿出来的那个鸡蛋放在空出来的第一个位置。

这样操作一遍之后,最后这篮子鸡蛋还是这篮子鸡蛋,顺序也依然是以前的那个顺序撒。

关于不同数据类型在内存中的存储:

Python中对于变量的内存管理是引用为主的

a是列表(可变数据类型),修改列表内容,列表地址是不变的

遍历列表a时得到的rec是整形变量,修改它的值其实是在修改它的指向,你可以结合下面这个程序来理解一下

a = [1,2,3,4,5]

print(a, id(a)) # 打印a以及a的内存地址

for i in range(len(a)):

print(id(a[i]), end=" ") # 打印a中每个元素的地址

print("")

print("#" * 30)

for i in a:

rec = a.pop()

print(f"addr of rec: {id(rec)}") # 打印rec的内存地址

# print(a)

a.insert(0,rec)

print(a, id(a)) # 打印a以及a的内存地址

for i in range(len(a)):

print(id(a[i]), end=" ") # 打印a中每个元素的地址

"""

## 运行结果

PS D:\Doc> & "C:/Program Files/Python37/python.exe" d:/Doc/temp/1.py

[1, 2, 3, 4, 5] 1541890855496

140704351219968 140704351220000 140704351220032 140704351220064 140704351220096

##############################

addr of rec: 140704351220096

addr of rec: 140704351220064

addr of rec: 140704351220032

addr of rec: 140704351220000

addr of rec: 140704351219968

[1, 2, 3, 4, 5] 1541890855496

140704351219968 140704351220000 140704351220032 140704351220064 140704351220096

PS D:\Doc>

"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值