1.Python的可变类型以及不可变类型有哪些
可变数据类型:列表list和字典dict,set集合。 不可变数据类型:整型int、浮点型float、字符串型string和元组tuple
#可变数据类型
a = [1,2,3]
print(id(a))
#2962896 运行结果
a = [1,2,3]
print(id(a))
#2964056 运行结果
#不可变数据类型
c = 1
print(id(c))
#259315888
d = 1
print(id(d))
#259315888
2.a = (1)与a = (1,)这样赋值之后有什么区别
第一种是整型1赋值给a,第二种是把元组赋值给a
a = (1)
print(a)#1
print(type(a))#<class 'int'>
a = (1,)
print(a)#(1,)
print(type(a))#<class 'tuple'>
3.函数的参数及定义
1.位置参数
def weizhi(a):
s = a*a
print(s)
weizhi(3)
#9
2.默认参数
#b为默认参数
def moren(a,b=3):
s = a+b
print(s)
moren(3)#输出6
moren(3,3)#6
moren(3,1)#这里输出变成了5
默认参数必须指向不变对象!(上面的输出结果变成4)
3.可变参数
可变参数在函数调用时自动组装为一个tuple
def haha(*af):#这里不加*时,下面要输入一个列表或者元组
sum = 0
print(type(af))#<class 'tuple'>
for n in af:
sum = sum + n * n
print(sum)#84
return sum
a = haha(1, 3, 5, 7)
4.关键字参数
关键字参数在函数内部自动组装为一个dict
def haha1(name,school,**other):
print('name:',name,'school:',school,'other:',other)
haha1('CWJ','GDUT',city='guangzhou')
#name: CWJ school: GDUT other: {'city': 'guangzhou'}
5.命名关键词参数
def person(name, age, *, city, job):
print(name, age, city, job)
def person(name, age, *args, city, job):
print(name, age, args, city, job)
4.python不能这么写
i = 1
if (i=2)== 2:
pass
SyntaxError: invalid syntax
5.类变量和实例变量
类变量为所有实例共享,实例变量为某个实例独有
class haha(object):
abc = "Person" # 类变量
def __init__(self, name): # self代表当前的实例对象
print(haha.abc) # 调用了类变量
self.iname = name # iname是实例变量,self修饰
def printName(self):
group = "Guangzhou+" # group是局部变量
print(group + self.iname)
if __name__ == "__main__":
p = haha("CWJ")
p.printName()
#Guangzhou+CWJ
6.对不可变类型的浅拷贝和对可变类型的浅拷贝的区别,如果改了可变类型对象中的一个值,那会有什么变化呢
浅拷贝就是将存放对象的地址赋给了新变量,而深拷贝就是将对象的数据重新生成。 浅拷贝是当旧变量的数据发生改变时,新变量也会改变;深拷贝则不会受影响
import copy
#对不可变数据类型浅拷贝时id不变
c = 1
d = copy.copy(c)
print(id(c)) #35772592
print(id(d)) #35772592
#对可变数据类型浅拷贝时id变
a = [1,2,3]
b = copy.copy(a)
print(id(a)) #14824912
print(id(b)) #14826072
#改变可变类型对象中的一个值
s = [0,1]
print(id(s)) #199100656
s[0] = 2
print(s) #[2, 1]
print(id(s))#199100656
#可以看出对于可变类型对象改变其一个值,其id不变
7.赋值是生成引用还是拷贝,比如思考一下以下现象出现的原因:
在拷贝这个过程中我们对这两个变量中的一个进行任意修改都不会影响其他变量 Python 赋值过程中不明确区分拷贝和引用,一般对静态变量的传递为拷贝,对动态变量的传递为引用。(对静态变量首次传递时也是引用,当需要修改静态变量时,因为静态变量不能改变,所以需要生成一个新的空间存储数据)。
字符串,数值,元组均为静态变量 列表,字典为动态变量。