寒假打卡第十天,当前mit6.100L进度(10/26)
今日主题Lists and Mutability(列表和可变性)
先总结以下三点,明天要整理一下可变性的陷阱:
1、对列表原地操作的方法
这些方法直接对列表进行操作,所以返回值就像print()一样是None
L = [2, 7, 6]
L1 = L.append(1)
"""
可以直接写成
L.append()
直接对列表本身进行元素增加操作,返回值为None
"""
# L1 = None L = [2, 7, 6, 1]
L2 = L.sort()
"""
可以直接写成
L.sort()
直接对列表本身进行排序,返回值为None
"""
# L2 = None L = [1, 2, 6, 7]
L3 = L.extend([3, 5])
L4 = L.extend( [ [4, 7], [9, 8] ] )
"""
可以直接写成
L.extend()
直接增添列表"内"元素到列表,返回值为None
"""
# L3 = None L = [1, 2, 6, 7, 3, 5]
# L4 = None L = [1, 2, 6, 7, 3, 5, [4, 7], [9, 8]]
L5 = L.clear()
"""
可以直接写成
L.clear()
直接清空列表元素,返回值为None
"""
# L5 = None L = []
2、对L.sort()和sorted(L)进行区分
前者直接原地对列表操作,后者则是创建一个排序后的副本
# L.sort()和sorted(L)的区别
L1 = [1, 1, 4, 5, 1, 4]
L1.sort() # L1 = [1, 1, 1, 4, 4, 5] 直接原地进行排序
L2 = [1, 4, 3, 3, 2, 2, 3]
# L2 = sorted(L2) # 赋值回自己,一般不这么做
L3 = sorted(L2)
# L3 = [1, 2, 2, 3, 3, 3, 4], L2保持不变,也就是创建了一个排序过的副本L3
3、我们可以使用id()函数
来查看这些对象在内存中的地址(唯一标识符)
L = [4,5,6]
print(L)
print(id(L))
L.clear()
print(L)
print(id(L)) # 看看clear()前后,L的内存地址是多少
print('\nL.clear() vs. L = []\n')
L = [4,5,6]
print(L)
print(id(L))
L = []
print(L)
print(id(L)) # 看看L=[]前后,L的内存地址是多少
运算结果:
[4, 5, 6]
2691759858112
[]
2691759858112
L.clear() vs. L = []
[4, 5, 6]
2691759857792
[]
2691759857984
顺带一提
print()函数的返回值也是None
print(print("666"))
666
None