Python day 07

Python day07

今天讲了浅拷贝深拷贝与可变类型和不可变类型,以及函数的定义,运用,参数,*args,**kwargs

可变与不可变类型:

可变类型: 值发生改变时,地址不变。:列表,字典,集合
不可变类型 值发生改变时,地址改变/:数字,字符串,元组,布尔类型

list1=[1,3,5,7]
print(id(list1))
list1.append(8) #2641347961416
				#2641347961416
print(id(list1)) 列表增加了值,地址不变,集合,字典同理
******************************************************************
a='asasas'
print(id(a))
a=a.replace('s','w')
print(id(a))#1934527717592
			#1934527718768
			字符串替换了一些值,地址发生改变
a=True
print(id(a))
a=False
print(id(a))#140713642211664
			#140713642211696     bool类型也是不可变类型

浅拷贝与深拷贝

潜拷贝:

方法:list.copy(), copy.copy()
在这里插入图片描述

浅拷贝:可变类型:共用同一个(里面的内容改变,地址不改变)

不可变类型:一开始是共用的,但一改变就不共用了

list1=[1,3,5,7]
list2=list1.copy()
print(list1,list2)
print(id(list1),id(list2)) #[1, 3, 5, 7] [1, 3, 5, 7]
							#2989963895368 2989963895432
							列表在浅拷贝时,内容一样,但会开辟一块新空间,所以地址不一样
******************************************************************************************
list1=[1,3,5,7]
list2=list1.copy()
list2[0]=0
print(list1,list2)				对列表2进行修改,不影响列表1list[0]指向的地址不同,一开始共用一个地址,内容改变就不共用了
print(id(list1),id(list2)) #[1, 3, 5, 7] [0, 3, 5, 7]
							#2651723948616 2651723948680
******************************************************************************************							
list1=[1,3,5,7,['a','b','c']]
list2=list1.copy()
print(id(list1),id(list2))				1589983142536 1590237527688
list2[4].append('d')
print(list1,list2)						[1, 3, 5, 7, ['a', 'b', 'c', 'd']] [1, 3, 5, 7, ['a', 'b', 'c', 'd']]
print(id(list1),id(list2))				1589983142536 1590237527688
										对可变类型操作时,一个内容发生了改变,两个都发生改变,因为引用相同的地址,但各自地址不变
							

深拷贝:

方法:copy.deepcopy()
在这里插入图片描述

import copy
list1 = [3, 5, 8, 9, ['a', 'b', 'c']]
list2 = copy.deepcopy(list1)  # 深拷贝
# list2.remove(9)
print(list1, list2)  [3, 5, 8, 9, ['a', 'b', 'c']] [3, 5, 8, 9, ['a', 'b', 'c']]
print(id(list2))		2144487407304
list2[4].append('hello')
print(list1, list2)		[3, 5, 8, 9, ['a', 'b', 'c']]		[3, 5, 8, 9, ['a', 'b', 'c', 'hello']]
print(id(list2))		2144487407304 深拷贝,完全开辟一块新的空间,修改自己内容,自己的内容改变,另一个列表的内容不变,但是地址都不变

函数

函数的定义

def function():

函数的参数,关键字

def ab(a,b=10): b为默认值
    print(a,b)
ab(10) #10 10,无参给b,就是默认值
ab(10,b=21) #10 21,若b有参,则为实参的值
**********************
def ab(b=10,a): #a不能在有默认值的参数后面,否则报错SyntaxError: non-default argument follows default argument
**********************
def ab(a,b,*args):
    print(a,b,args)
ab(10,10) #10 10 ()  *args可以传入n个值并组成元组,也可以忽略不填,不填就返回一个空元组
**********************
def ab(a,b,*args): #若*args参数在最前面,所有实参都会付给*args  ab(10,10,1,3,5)
    print(a,b,args)
ab(10,10,1,3,5,7,9)    #10 10 (1, 3, 5, 7, 9)  
**********************
def ab(a,*args,b=0):*args后面的参数应该有默认值,或传参时指定b=print(a,b,args)
ab(10,1,3,5) #10 0 (1, 3, 5)

def ab(*args,a=0,b):
    print(a,b,args)
ab(10,10,1,3,5,b=7) #0 7 (10, 10, 1, 3, 5)
*********************************************
**kwargs

def ab(**kwargs):
    print(kwargs)

ab(a=1,b=2)  #{'a': 1, 'b': 2}  字典的形式

函数中可变不可变类型对原值的影响

如果是可变类型,传参传的是地址,函数中内容改变,原内容改变。
不可开遍类型,函数中值改变,原值不改变,因为传参传的只是值,不是地址

list1=[1,3,5,7,[2,4]]
print(id(list1))
def abc(list1):
    list1[4].append(9)
abc(list1)
print(list1) 		[1, 3, 5, 7, [2, 4, 9]]对于可变类型, 函数内容改变,,原内容改变

def abc(list1):
    list1.append(9)
abc(list1)
print(list1)		[1, 3, 5, 7, [2, 4], 9]函数内容改变,,原内容改变
********************************************
不可变类型
numbr=1
def abc(n):
    n=2
abc(numbr)
print(numbr) #1  函数内值可变,地址发生改变,不影响原值

列题

1. 定义一个函数,有可变参数(全为数字),求最大值、最小值
def shuzi(*args):
    print('最大值:{},最小值{}:'.format(max(*args),min(*args)))
shuzi(1,3,5,7,9)
********************************************
2. 定义一个函数,求1-n的范围内(参数是n),偶数的和
def sum(n):
    sum=0
    for i in range(1,n):
        if i % 2 ==0:
            sum+=i
    print(sum)
sum(10)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值