拷贝

object.assign笔记

牧云@^-^@ 提交于 2019-12-09 12:04:54
基本用法 object.assign():方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target,然后返回目标对象,如果参数不是对象,则会转为对象,然后返回。有两个参数,第一个是目标对象,第二个是源对象。 const target = { a: 1 }; const source1 = { b: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3} 如果目标对象与源对象==有多个同名属性==,那么源对象的会覆盖目标对象的属性,后面的源对象属性会覆盖前面的源对象属性。 const target = { a: 1, b: 1 }; const source1 = { b: 2, c: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3} 由于undefined和null无法转成对象,所以如果它们作为参数或首参,就会报错。 Object.assign(undefined) // 报错 Object.assign(null) // 报错 如果非对象参数出现在源对象的位置

netty 概念篇

有些话、适合烂在心里 提交于 2019-12-09 11:06:44
netty是什么?    Netty是由 JBOSS 提供的一个 java开源 框架。Netty提供异步的、 事件驱动 的网络应用程序框架和工具,用以快速开发高性能、高可靠性的 网络服务器 和客户端程序。   也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、 服务端 应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。   “快速”和“简单”并不用产生维护性或性能上的问题。Netty 是一个吸收了多种协议(包括FTP、SMTP、HTTP等各种二进制文本协议)的实现经验,并经过相当精心设计的项目。最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。 Netty和Tomcat有什么区别?   Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。   有人说netty的性能就一定比tomcat性能高,其实不然,tomcat从6

SVN ---文件加锁,执行clean up命令

你。 提交于 2019-12-09 10:52:04
一、SVN 中 clean up 的功能 当Subversion改变你的工作拷贝(或是.svn中的任何信息),它会尽可能的小心,在修改任何事情之前,它把意图写到日志文件中去,然后执行 log文件中的命令,并且执行过程中在工作拷贝的相关部分保存一个锁,防止Subversion客户端在变更过程中访问工作拷贝。如果 Subversion的操作中断了 (举个例子:进程被杀死了,机器死掉了),日志文件会保存在硬盘上,通过重新执行日志文件, Subversion 可以完成上一次开始的操作,你的工作拷贝可以回到一致的状态。 这就是svn clean up所作的:它查找工作拷贝中的所有遗留的日志文件,删除进程中工作拷贝的锁。如果Subversion告诉你工作拷贝中的一部分已经“锁定”了,你就需要运行这个命令了。 二、本地文件锁定,使用“清除”命令 SVN本地更新时,由于一些操作中断,如磁盘空间不够,用户取消等,可能会造成本地文件被锁定的情况。这时候无论你在执行SVN的更新、上传、添加等子命令都会提示“**locked”的错误,如图: 一般出现这种情况的解决方法: 1、可以使用SVN clean up来 清除锁定 。 2、如果不是本目录锁定,系统提示上一层目录锁定,需要到上一层或者根目录中清除。 3.如果在根目录下都无法 clean的话,一般采取的方法是另外找一个目录重新CHECKOUT

Docker中使用Centos镜像安装tomcat,jdk1.8部署Java web项目

℡╲_俬逩灬. 提交于 2019-12-09 00:37:11
1. docker pull centos获取centos镜像 2. 后台运行centos镜像并开放8080端口,window端可通过访问80端口访问到8080端口 docker run -itd -p 80:8080 docker.io/centos 3. 从宿主机拷贝文件到容器 拷贝方式为: docker cp 宿主机中要拷贝的文件名及其路径 容器名:要拷贝到容器里面对应的路径 例如,将宿主机中路径: /opt/test/下的文件:jdk 拷贝到容器: mycontainer的:/niu 路径下,同样还是在宿主机中执行命令如下: docker cp /opt/doc mycontainer:/niu 4. 解压jdk tar -xzvf jdk1.8.tar.gz 5. 安装vim yum -y install vim 6. 设置环境变量 vim ~/.bashrc #set oracle jdk environment export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_121 ## 这里要注意目录要换成自己解压的jdk 目录 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin

python深浅拷贝

蓝咒 提交于 2019-12-08 17:33:48
Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。 下面本文就通过简单的例子介绍一下这些概念之间的差别。 要想了解深浅拷贝,首先要知道什么是深浅拷贝? 深拷贝是对于一个对象所有层次的拷贝(递归)copy.deepcopy 浅拷贝是对于一个对象的顶层拷贝;通俗的理解是:拷贝了引用,并没有拷贝内容.copy.copy # 要想知道两者的区别,首先要知道什么是可变类型和不可变类型? 不可变类型:整型,长整型,浮点数,复数,布尔,字符串,元组 可变类型:列表,字典。 # 深浅拷贝有什么区别那? 1、如果用copy.copy、copy.deepcopy对一个全部都是不可变类型的数据进行拷贝,那么它们结果相同,都是引用指向; 2、如果拷贝的是一个拥有不可变类型的数据,即使元组是最顶层,那么deepcopy依然是深拷贝,而copy.copy还是指向 3、基本上只要不是我们自已手动调用的deepcopy方法都是浅拷贝,切片拷贝字典拷贝都是浅拷贝,而有些内置函数可以生成拷贝(list),属于深拷贝:a = list(range(10)) b = list(a) 预备知识——各基本数据类型的地址存储及改变情况   在python中的数据类型包括:bool、int、long、float、str、set、list、tuple、dict等等

python list 浅拷贝 深拷贝

烂漫一生 提交于 2019-12-08 17:33:29
python语句中list的相互赋值要遵循深浅拷贝的原则: newmatrix = matrix #print(newmatrix) for i in range ( len ( matrix ) ) : for j in range ( len ( matrix [ i ] ) ) : matrix [ j ] [ i ] = newmatrix [ len ( newmatrix ) - i - 1 ] [ j ] 为浅拷贝,输出的newmatrix值会随matrix的值发生变化 需要采用深拷贝 最简单的调用copy库 newmatrix=copy.deepcopy(matrix) 即可 来源: CSDN 作者: z893761325 链接: https://blog.csdn.net/z893761325/article/details/102980363

pyhton 赋值,浅拷贝, 深拷贝

笑着哭i 提交于 2019-12-08 17:33:18
python 赋值, 浅拷贝, 深拷贝 先放一段代码 list = [1,2,3,4,[1,2,3]] list_1 = list #赋值 list_2 = list[:] #浅拷贝 list_3 = list.copy() #浅拷贝 list[0] = 'a' print(list) print(list_1) print(list_2) print(list_3) list[4][0] = 'a' print(list) print(list_1) print(list_2) print(list_3) 输出 C:\Users\Mk\Anaconda3\python.exe C:/Users/Mk/PycharmProjects/untitled1/hello.py [‘a’, 2, 3, 4, [1, 2, 3]] [‘a’, 2, 3, 4, [1, 2, 3]] [1, 2, 3, 4, [1, 2, 3]] [1, 2, 3, 4, [1, 2, 3]] [‘a’, 2, 3, 4, [‘a’, 2, 3]] [‘a’, 2, 3, 4, [‘a’, 2, 3]] [1, 2, 3, 4, [‘a’, 2, 3]] [1, 2, 3, 4, [‘a’, 2, 3]] Process finished with exit code 0 ··················

Python列表赋值,复制,深拷贝以及5种浅拷贝详解

て烟熏妆下的殇ゞ 提交于 2019-12-08 17:31:31
概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新列表 l1 = [ 1 , 2 , 3 , 4 , 5 ] # 对l2赋值 l2 = l1 print ( l1 ) l2 [ 0 ] = 100 print ( l1 ) 示例结果: [1, 2, 3, 4, 5] [100, 2, 3, 4, 5] 可以看到,更改赋值后的L2后L1同样也会被更改,看似简单的“复制”,在Python中,列表属于可变对象,而对可变对象的复制其实就是将列表的内存空间类似C中的指针再次指向新的变量名,而不是诸如字符串这种不可变对象在复制时会创建新的内存空间进行赋值。即此时L1和L2指向的是同一片内存空间,那么怎么实现真正复制呢? 浅拷贝 当列表中的元素为不可变对象时,我们可以用以下方法对列表进行赋值: import copy # 定义一个新列表 L0 = [ 1 , 2 , 3 , 4 , 5 ] print ( L0 ) print ( '-' * 40 ) 利用切片 L1 = L0 [ : ] L1 [ 0 ] = 100 print ( L0 ) 利用模块copy import copy L2 = copy.copy(L0) L2[0] = 100

Python中浅拷贝,深拷贝的区别

流过昼夜 提交于 2019-12-08 17:29:46
Python中浅拷贝,深拷贝的区别 以列表为例, 三者的区别主要在 新列表中元素跟原来列表中元素是否仍有联系 1, 对元组类型来说,使用 tuple() 或者切片操作符':',它会返回一个指向相同元组的引用, 内存地址的引用计数会加1, 但copy前后的对象指向的是同一块内存地址, 也就不会有区别了. 2. 浅拷贝, 原列表中可变元素的操作会影响新列表中元素 以列表为例, 首先会初始化一块新的内存地址, 这里存的是原列表的地址, 新的列表指向的是新内存地址, 这跟原列表的地址是不一样的 副作用, copy前的对象影响新的对象 l1 = [[1, 2], (30, 40)] l2 = list(l1) l1.append(100) l1[0].append(3) l1 #[[1, 2, 3], (30, 40), 100] l2 #[[1, 2, 3], (30, 40)] 3. 深拷贝, 原列表元素完全不会影响新列表中元素 初始化一块新的内存地址, 新的列表指向这一块新的内存地址, 然后会将原列表里元素的值拷贝到新的内存中, 完全不会受到原列表的影响 浅拷贝 下面四种形式是等价的 new_list = old_list.copy() new_list = old_list[:] new_list = list(old_list) new_list = copy.copy(old

Python中赋值、浅拷贝与深拷贝

旧巷老猫 提交于 2019-12-08 17:27:46
python中关于对象复制有三种类型的使用方式,赋值、浅拷贝与深拷贝。他们既有区别又有联系,刚好最近碰到这一类的问题,研究下。 一、赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不同。如下: list_a = [1,2,3,"hello",["python","C++"]] list_b = list_a 这种情况下,list_b和list_a是一样的,他们指向同一片内存,list_b不过是list_a的别名,是引用。 我们可以使用 list_b is list_a 来判断,返回true,表明他们地址相同,内容相同。也可使用id(x) for x in list_a, list_b 来查看两个list的地址。 赋值操作(包括对象作为参数、返回值)不会开辟新的内存空间,它只是复制了新对象的引用 。也就是说,除了list_b这个名字以外,没有其它的内存开销。 修改了list_a,就影响了list_b;同理,修改了list_b就影响了list_a。 二、浅拷贝(shallow copy) 浅拷贝会创建新对象,其内容是原对象的引用 。 浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数 比如对上述list_a, 切片操作:list_b = list_a[:] 或者 list_b = [each for each in list_a] 工厂函数:list