课外话题 传值与传址
# 传值与传址
'''如果在调用函数的时候,传递的参数是一个对象,那么传递的是参数的存储的内存空间地址.那么在任意地方改变参数值后,其他指向该地址的变量的值都将
改变
'''
def a(n):
n[2] = 100
print(n)
return None
def b(n):
n += 100
print(n)
return None
an = [1,2,3,4,5,6]
bn = 9
print(an)
a(an)
print(an)
print(bn)
b(bn)
print(bn)
[1, 2, 3, 4, 5, 6]
[1, 2, 100, 4, 5, 6]
[1, 2, 100, 4, 5, 6]
9
109
9
关于列表的函数
-
append 在列表的末尾追加一个值
- list.append(value)
-
insert 在指定位置插入一个值
- list.insert(index,value)
- 在下标为index的位置插入一个值,index下标后面的值往后顺延
-
del 删除
- 删除指定的值
-
pop 拿出
- 拿出最后一个值,并返回拿出的值
-
remove 删除
- 在列表中删除指定的值(前提是列表中有这样的一个值)
- 在使用remove的时候,最好现行判断要删除的值是否在list中
-
clear 清空
- 将列表中的数据清空
-
reverse 反转
- 将列表中的值进行反转(头变尾 尾变头)
-
extend 拼接
- 将一个列表直接拼接到另一个列表的后面
-
count 查找列表中指定值的个数
- 查找列表中指定值的个数
-
copy 拷贝(浅拷贝)
- 将列表拷贝到另外一个内存地址中
- b = a.copy()
# insert
a = [11,22,33,44,55]
a.insert(1,200)
print(a)
# del
del a[1]
print(a)
#pop
indexValue = a.pop()
print("indexValue=",indexValue)
# remove
a.remove(44)
print(a)
# clear
a.clear()
print(a)
# reverse
a = [1,2,3,4,5,6]
print(a)
a.reverse()
print(a)
# extend
b = [7,8,9,0]
a.extend(b)
print(a)
# count
index = a.count(1)
print(index)
[11, 200, 22, 33, 44, 55]
[11, 22, 33, 44, 55]
indexValue= 55
[11, 22, 33]
[]
[1, 2, 3, 4, 5, 6]
[6, 5, 4, 3, 2, 1]
[6, 5, 4, 3, 2, 1, 7, 8, 9, 0]
1
# copy
a = [123,345,567,789]
print("a.value",a)
print("a.id=",id(a))
print("*"*20)
b = a.copy()
print("b.value",b)
print("b.id=",id(b))
a.value [123, 345, 567, 789]
a.id= 139637277773640
********************
b.value [123, 345, 567, 789]
b.id= 139637278306440
#深拷贝与浅拷贝的区别
# 浅拷贝的时候,只是拷贝列表的第一层,如果列表中还包含了其他的对象(list.set等)则不会进行拷贝而是进行地址引用
a = [1,2,3,4,[100,200,300]]
b = a.copy()
print("a.id=",id(a))
print("b.id=",id(b))
print("*" * 20)
print("a.value=",a)
print("b.value=",b)
print("*" * 20)
print("a[4].id",id(a[4]))
print("b[4].id",id(b[4]))
print("*" * 20)
b[4][1] = 666
print("a.value=",a)
print("b.value=",b)
a.id= 139637277515912
b.id= 139637277433736
********************
a.value= [1, 2, 3, 4, [100, 200, 300]]
b.value= [1, 2, 3, 4, [100, 200, 300]]
********************
a[4].id 139637278288904
b[4].id 139637278288904
********************
a.value= [1, 2, 3, 4, [100, 666, 300]]
b.value= [1, 2, 3, 4, [100, 666, 300]]
元组 tuple
- 可以将元组看作一个不能更改的list
元组的创建
- 使用() 来创建元组
- t = ()
- 元组的特性
- 是有序列表
- 元组的值可以访问,但是不能新增\修改\删除等
- 元组的数据可以是任意类型
- 总之,list所有特性,除了可修改以外,元组都具有
- 也就意味着,list具有的一些操作.如:索引\分片\序列相加\相乘\成员资格等都一模一样
# 元组的创建
t = ()
print(type(t))
# 创建一个值的元组
t = (1,)
print(type(t))
print(t)
t = 1,
print(type(t))
print(t)
# 多个值
t = (1,2,3,4,5)
print(type(t))
print(t)
t = 1,2,3,4,5
print(type(t))
print(t)
# list转tuple
a = [1,2,3,4,5,6]
t = tuple(a)
print(type(t))
print(t)
(1,)
(1,)
(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5, 6)
# 元组相加 (不是在原来的空间中进行值的改变,而是成为了一个新的对象)
t1 = (1,2,3,4,5)
t2 = (6,7,8,9,0)
t1 += t2
print(t1)
(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
# 元组相乘
t1 = (1,2,3,4,5)
t1 = t1 * 3
print(t1)
(1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5)