深浅拷贝

在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,作用域) 初识的更多相关文章

  1. Scala类型声明与定义、函数定义、流程控制、异常处理

    Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库. Scala的基础类型基本与javascript一致. Scala的数据类型全部相同于Java中,具有 ...

  2. Python全栈开发之3、深浅拷贝、变量和函数、递归、函数式编程、内置函数

    一.深浅拷贝 1.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy # 定义变量 数字.字符串 # n1 = 123 n1 ...

  3. JS-对象的深浅拷贝及其新增方法测试

    我们在了解数据类型的时候,都知道一般的字符,数值,undefined和布尔值等都为一般数据类型,它们在进行数据传输的时候,进行的是值传递,当我们修改新数据,是不影响老数据的.但是我们今天要讲的是数据类 ...

  4. python 小数据池 深浅拷贝 集合

    1.小数据池: 1.1代码块: 一个文件,一个函数,一个类,一个模块,终端中每一行 1.1.1 数字: -5 ~ 256 1.1.2 字符串: 乘法时总长度不能超过20 1.1.3 布尔值: 内容相同 ...

  5. python 深浅拷贝&集合

    一.深浅拷贝 1.浅拷贝,只会拷贝第一层 s = [1, 'ss', '小可爱'] s1 = s.copy() print(s1) >>> [1, 'ss', '小可爱'] s = ...

  6. js 或jquery定义方法时,参数不固定是怎么实现的

    //①不定义接受参数的方式来接受参数(arguments) function getparams(){ //利用arguments来接受参数,arguments表示参数集合, //里面存放的调用这个方 ...

  7. python之函数、参数、作用域、递归

    函数的定义 函数也就是带名字的代码块.使用关键字def来定义,指出函数名及参数,以冒号结尾. def fibs(num): result =[0,1] for i in range(num-2): r ...

  8. 【学习笔记】--- 老男孩学Python,day10, 函数, 动态参数 命名空间\作用域 global nonlocal

    1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序:位置---*args---默认值---**kwargs 在形参上*聚合, **聚合 在实参上*打散, ...

  9. 07_python_集合深浅拷贝

    一.join li = ["李嘉诚", "麻花藤", "林海峰", "刘嘉玲"] s = "_".j ...

随机推荐

  1. Liquibase 使用(全)

    聊一个数据库脚本的版本工具 Liquibase,官网在这里 ,初次看到,挺神奇的,数据库脚本也可以有版本管理,同类型的工具还有 flyway . 开发过程经常会有表结构和变更,让运维来维护的话,通常会 ...

  2. Z字形变换 leetcode 6

    一.按行存储 1.解题思路 1.通过当前行的不断上下循环移动 2.将字符按序存放入vector中 3.最后再按行取出 2.代码及注释 class Solution { public: string c ...

  3. SVN+Apache+IF.svnadmin支持https实现web管理SVN

    一,软件准备 .安装apache [root@localhost ~]# yum install httpd -y .安装svn服务器(其中,mod_dav_svn是apache服务器访问svn的一个 ...

  4. Unity3D小游戏开发之两个我踩过的坑

    最近在开发一个植物大战僵尸小游戏,今天写了一早上的代码,踩了两个坑,这两个坑的位置分别位于触发器和数据转换,写这篇博文以此来让其他程序员不要再去踩这两个坑. 1.我在做简易僵尸模型的时候,这个僵尸模型 ...

  5. Mysql库、表、记录的基本操作

    库的操作 ---> 类似于文件夹 - 增: 创建数据库: create database db1; 创建带字符集的数据库: create database db2 charset=utf8; - ...

  6. 快速傅里叶变换与快速数论变换瞎学笔记$QwQ$

    $umm$先预警下想入门$FFT$就不要康我滴学习笔记了,,, 就,我学习笔记基本上是我大概$get$之后通过写$blog$加强理解加深记忆这样儿的,有些姿势点我可能会直接$skip$什么的,所以对除 ...

  7. Oracle表空间概述及其基本管理

    最近在工作中遇到有同事对Oracle表空间的理解有问题,所以写了这篇文章.我会从概念,管理及特别需要关注的点等几个维度对表空间进行一些介绍.本文以介绍表空间为主,涉及到的其他概念不展开描述.有问题的地 ...

  8. 【转】c#中数组赋值方法

    C#中数组复制有多种方法,数组间的复制 ,,,};int [] alias = pins; 这里出了错误,也是错误的根源,以上代码并没有出错,但是根本不是复制,因为pins和alias都是引用,存在于 ...

  9. nor flash之写保护

    背景 没有电池的嵌入式设备,很容易发生随机掉电.因此要让产品可靠稳定,就必须保证各种场景下的掉电安全. 例如系统更新过程随机掉电,不能导致系统无法启动.例如正常读写flash过程中掉电,最多正在传输的 ...

  10. 【重要】Pro Git 第二版 简体中文

    不管是入门还是精通git,下面这本书都是必读,同时它也是官方推荐书籍.   Pro Git 第二版 简体中文     我自己还收集了一份网页版的progit,但可能不是progit第二版. 下载地址  ...