深浅拷贝 集合(定义,方法) 函数(定义,参数,return,作用域) 初识
深浅拷贝
在python中浅拷贝
a=[1,2,3,4,]
b=a.copy()
b[0]='3333'
print(a) #[1, 2, 3, 4] 浅拷贝一层并不会对a造成变化
print(b) #[3333, 2, 3, 4]
c=[[1,2],3,33]
d=c.copy()
# print(d) #[[1, 2], 3, 33]
d[0][1]=55
print(d) #[[1, 55], 3, 33]
print(c) #[[1, 55], 3, 33] 浅拷贝中含有列表了 a列表中的列表会随着b的更改而更改
这是因为 浅拷贝这能拷贝一层 第二层的列表不会被拷贝 如图已经更改了指向所以a也会跟着改变


深拷贝的方式就是; 先引入模块import copy

现在的深拷贝可以拷贝多层 所以b的变化不会影响到a
接下来说说集合
集合可以筛选掉重复的内容 集合里面的元素是一个可哈希的数据,即是可以作为字典的键,所以集合中的元素不能有列表或者元组这些不可哈希元素,但是集合本身是一个非可哈希数据,所以集合不能作为字典的键 还可以用in 和not in判断某元素在不在集合里面
不可变集合通过 a=frozenset(a)创建
a=[1,2,3,4]
通过set 命令可以将a转成集合
b=set(a)
接下来说说集合的增删
增 改
a=[1,2,3,4,5]
b=[5,6,7,8,9,]
a1=set(a)
a1.add('88') #添加到一个元素到集合中去
b1=set(b)
b1.update(['oppp',44]) #添加列表的两个元素到集合中去
b1.update('wwees') #不重复的添加该字符串的每一个到集合中去
print(a1) #{1, 2, 3, 4, 5, '88'}
print(b1) #{{5, 6, 7, 8, 9, 'oppp', 44, 's', 'e', 'w'}
删
a=[1,2,3,4,5]
b=[5,6,7,8,9,] a=set(a)
a.add('1111')
print(a) #{1, 2, 3, 4, 5, '1111'}
b=set(b)
b.update(['111','2222'])
print(b) #{5, 6, 7, 8, 9, '2222', '111'}
b.remove('111') #删除指定的值
print(b.pop()) #随机删除值并返回该值
print(b)
a.clear() 清空集合
print(a)
del a #从内存上删除a 集合
如果要查看集合 可以用for循环去遍历
然后是集合的关系测试:
a=[1,2,3,4,5]
b=[5,6,7,8,9,]
a=set(a) b=set(b)
print(a.intersection(b)) #{5}
print(a&b) #{5} 这两个都是取交集
print(a.union(b)) #{1, 2, 3, 4, 5, 6, 7, 8, 9}
print(a|b) #{1, 2, 3, 4, 5, 6, 7, 8, 9} 这两个都是取并集
print(a.difference(b)) #{1, 2, 3, 4}
print(a-b) #{1, 2, 3, 4} 这两个都是取差集
print(a.symmetric_difference(b)) #{1, 2, 3, 4, 5, 6, 7, 8, 9}
print(a^b) #{1, 2, 3, 4, 5, 6, 7, 8, 9} 这两个取的是对称差集,也可以说是反向交集
a.issuperset(b) #判断a>b / a 是b的父集 或超集
a.issubset(b) #判断a<b /a 是b的子集
接下来是函数
函数==subroutine 子程序 / procedures 过程
函数的作用:1 减少重复代码
2 方便修改 更易扩展
3 保持代码的一致性
用‘def’开头来定义一个函数
函数名字的命名和变量名字的命名规则一样
def test(): #‘test()’就可以被调用函数内容根据自己的需求去写就可以了
函数的参数: 必须参数 关键字参数 默认参数 不定长参数
必须参数 是位置必须一致 如:
def test(name,age):
print(‘Name’,name)
print(‘Age’,age)
test('linux',22) #linux 22 ‘linux’ 和name 22和age 都是位置上一一对应好的 位置不能改
关键字参数 位置可以随意改变:
def test(name,age):
print('Name',name)
print('Age',age)
test(age=22,name='lin') #Name lin Age 22 #age=22 和 name=‘lin’位置可以随意改变
默认参数 即默认是不变的 其他情况单独更改
def test(name,age,sex='man'):
print('Name',name)
print('Age',age)
print('Sex',sex)
test(age=22,name='lin') #Name lin Age 22 Sex man test()括号中可以绘制填两个内容另一个已经默认了 需要改的话直接写入第三个内容就可以了
不定长参数分为两种 分别是 无命名参数和有命名参数
创建方式为 def test(*arge) #无命名参数输入的内容会加入到一个元组里去
无命名参数
def test(**kwarges) #指定命名参数 输入的内容会加入到一个字典中去
def test(*args):
for i in args:
print(i,end=' * ')
test(1,2,3,45,) #1 * 2 * 3 * 45 *
指定命名参数
def test2(**kwargs):
for j in kwargs:
print(j,kwargs[j],end= '--#--')
test2(name='lin',age=22,sex='man') #name lin--#--age 22--#--sex man--#--
在填写参数时是有优先级的:必须参数>关键字参数>默认参数>无命名参数>指定命名参数
def test3(a,name,sex=man,*args,**kwargs):
pass
test3(1,'lin',1,2,3,age=33,hobby=book)
在函数中还有个return 其作用是结束函数 返回某个对象
注意 1 函数中如果没有去特殊定义return 默认是返回一个None
2 如果return多个对象那么python会将这多个对象封装成一个元组返回
一个对象
def test4():
a=3333
return a
b=test4()
print(b) #3333
多个对象
def test4():
return 1,2,3,3444
b=test4()
print(b) #(1, 2, 3, 3444)
没有对象
def test4():
return
b=test4()
print(b) #None
接下来的函数中变量的查找顺序 LEGB:
白话就是 :作用域局部>外层作用域>当前模块中的全局>python内置作用域
图片就是这样

需要注意的是:1 只有模块 类 函数 才能映入新的作用域
2 对于一个变量内部作用域先声明就会覆盖外部作用域,不声明直接使用就会使用外部作用域的变量
3 内部作用域要修改外部作用域的值时 全局变量要使用global 关键字 嵌套作用域变量要是用nonlocal关键字, nonlocal是python3新增的关键字
通过这串代码可以清楚知道每层的作用域是什么
b=int(2.33) #int built-in
a=1 #global
def outer():
o_count=22 #enclosing
def iner():
i_count=333 #local 到这就结束了 希望给为指教!
深浅拷贝 集合(定义,方法) 函数(定义,参数,return,作用域) 初识的更多相关文章
- Scala类型声明与定义、函数定义、流程控制、异常处理
Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库. Scala的基础类型基本与javascript一致. Scala的数据类型全部相同于Java中,具有 ...
- Python全栈开发之3、深浅拷贝、变量和函数、递归、函数式编程、内置函数
一.深浅拷贝 1.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy # 定义变量 数字.字符串 # n1 = 123 n1 ...
- JS-对象的深浅拷贝及其新增方法测试
我们在了解数据类型的时候,都知道一般的字符,数值,undefined和布尔值等都为一般数据类型,它们在进行数据传输的时候,进行的是值传递,当我们修改新数据,是不影响老数据的.但是我们今天要讲的是数据类 ...
- python 小数据池 深浅拷贝 集合
1.小数据池: 1.1代码块: 一个文件,一个函数,一个类,一个模块,终端中每一行 1.1.1 数字: -5 ~ 256 1.1.2 字符串: 乘法时总长度不能超过20 1.1.3 布尔值: 内容相同 ...
- python 深浅拷贝&集合
一.深浅拷贝 1.浅拷贝,只会拷贝第一层 s = [1, 'ss', '小可爱'] s1 = s.copy() print(s1) >>> [1, 'ss', '小可爱'] s = ...
- js 或jquery定义方法时,参数不固定是怎么实现的
//①不定义接受参数的方式来接受参数(arguments) function getparams(){ //利用arguments来接受参数,arguments表示参数集合, //里面存放的调用这个方 ...
- python之函数、参数、作用域、递归
函数的定义 函数也就是带名字的代码块.使用关键字def来定义,指出函数名及参数,以冒号结尾. def fibs(num): result =[0,1] for i in range(num-2): r ...
- 【学习笔记】--- 老男孩学Python,day10, 函数, 动态参数 命名空间\作用域 global nonlocal
1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序:位置---*args---默认值---**kwargs 在形参上*聚合, **聚合 在实参上*打散, ...
- 07_python_集合深浅拷贝
一.join li = ["李嘉诚", "麻花藤", "林海峰", "刘嘉玲"] s = "_".j ...
随机推荐
- 【python小随笔】celery异步任务与调用返回值
s1.py(配置任务文件) from celery import Celery import time my_task = Celery("tasks", broker=" ...
- windows 服务的安装、启动、状态查询、停止操作c++实现
具体的自己看看代码 粘贴复制即可使用 卸载也很简单自己查看MSDN 加上就是 #ifndef __SERVICEMANAGE_H__ #define __SERVICEMANAGE_H__ #incl ...
- 「2018-12-02模拟赛」T2 种树 解题报告
2.种树(tree.pas/cpp/in/out) 问题描述: Fanvree 很聪明,解决难题时他总会把问题简单化. 例如,他就整天喜欢把图转化为树.但是他不会缩环,那他怎么转化呢? 这是一个有 n ...
- 1093 字符串A+B (20 分)C语言
给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集.要求先输出 A,再输出 B,但重复的字符必须被剔除. 输入格式: 输入在两行中分别给出 A 和 B,均为长度不超过 10^6的 ...
- Docker日常常用命令汇总
一.使用docker镜像/容器 (1)创建容器,且进入命令台 docker run --name 容器名 -i -t ubuntu /bin/bash (2)查看/容器 docker ps #查看正在 ...
- linux下安装mysql5.7.25详细教程
前言 最近项目上线,开始给用户测试了.搞下来好多台服务器,自然要装一个mysql的服务器.想想广大博友应该都会遇到如何装mysql的问题,就此分享,给大家一个安装指南.供大家以后安装的时候,提高效率, ...
- 简单快速破解IDEA
====================================2019.09.16更新==================================== 可以直接去掉第三步,直接在激活 ...
- Serverless 微服务实践-移动应用包分发服务
背景 阿里云函数计算是事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询.性能监控.报 ...
- 重拾c++第四天(7):函数相关
1.引用变量: int a; int &b = a; //引用变量 指向同一地址,必须在初始化时定义,且一直对原变量献上忠诚,主要针对类对象 2.函数重载最好用在功能相同,但数据类型不同的情况 ...
- Redis高可用方案-哨兵与集群
Redis高可用方案 一.名词解释 二.主从复制 Redis主从复制模式可以将主节点的数据同步给从节点,从而保障当主节点不可达的情况下,从节点可以作为 后备顶上来,并且可以保障数据尽量不丢失(主从 ...