拷贝

python深浅拷贝

牧云@^-^@ 提交于 2020-02-13 13:03:19
一.深浅拷贝 1. = 没有创建新对象, 只是把内存地址进行了复制 1 从上到下只有一个列表被创建 2 lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"] 3 lst2 = lst1 # 并没有产生新对象. 只是一个指向(内存地址)的赋值 4 print(id(lst1)) 5 print(id(lst2)) 6 7 lst1.append("葫芦娃") 8 print(lst1) 9 print(lst2) 2. 浅拷贝 lst.copy() 只拷贝第一层. 1 lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"] 2 lst2 = lst1.copy() # 拷贝, 抄作业, 可以帮我们创建新的对象, 和原来长的一模一样, 浅拷贝 3 4 print(id(lst1)) 5 print(id(lst2)) 6 7 lst1.append("葫芦娃") 8 print(lst1) 9 print(lst2) 1 lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅",["长白山", "白洋淀", "黄鹤楼"]] 2 lst2 = lst1.copy() # 浅拷贝. 只拷贝第一次内容 3 4 print(id(lst1)) 5 print(id(lst2)) 6 7 print(lst1) 8 print(lst2) 9

【C++】string::substr函数

。_饼干妹妹 提交于 2020-02-13 04:35:07
形式 :s.substr(p, n) 返回一个string,包含字符串s中从p开始的n个字符的拷贝(p的默认值是0,n的默认值是s.size() - p,即不加参数会默认拷贝整个s) 1 int main() 2 { 3 string a; 4 string s("123456789"); 5 6 a = s.substr(0,5);//拷贝字符串s中从第0位开始的长度为5的字符串 7 cout << a << endl;//输出12345 8 9 a=s.substr(); //不加参数即默认拷贝整个字符串s 10 cout<<a<<endl;//输出123456789 11 12 a=s.substr(4);//输出56789 13 cout<<a<<endl;//单个参数则默认拷贝从第4位开始至末尾的字符串 14 } 来源: https://www.cnblogs.com/HOLLAY/p/11324452.html

为什么返回值为数值时,返回局部变量可以。而返回值为引用时,不能返回局部变量

99封情书 提交于 2020-02-12 21:07:41
最重要的一点: 函数不能返回指向栈内存的指针! https://blog.csdn.net/weixin_40539125/article/details/81367466 为什么? 因为返回的都是值拷贝! 一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。 我们知道,局部变量的作用域是函数内部,函数一旦执行结束,栈上的局部变量会进行销毁,内存得到释放。因此,此时函数返回的是该局部变量的值拷贝,这是没有问题的。但是如果返回的是局部变量的地址,那么返回的只是该局部变量指针的拷贝,而随着函数运行结束,该拷贝指针所指向的栈内存已经被释放,那么指向一个未知区域就会导致调用的错误。 那如果返回的指针指向的是堆内存,又会怎么样? 这样的使用是没有问题的,在函数内new空间,在函数外delete空间。但是这样并不是一种好的编程风格,尽量在同一个作用域内进行new和delete操作

IO多路复用

天大地大妈咪最大 提交于 2020-02-12 12:03:13
一.IO多路复用 前面用协程实现IO阻塞自动切换,‘如何去实现事件驱动的情况下IO的自动阻塞的的切换,这个学名叫IO多路复用。 比如socketsew64hmay'y'yver,多个客户端连接,单线程下实现并发效果,这就叫多路复用. 同步io和异步IO,阻塞IO和非阻塞IO的区别? 二.IO模型的前戏准备   1.用户空间与内核空间     操作系统的核心是内核,独立于普通应用程序,可以访问受保护的内存空间也有访问底层硬件的权限     为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操作系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。     各个进程的使用,称为用户空间。   2.进程切换     为了控制进程的执行,内核必须有能力挂起正在CPU运行的程序,并恢复以前挂起的某个进程。进程切换由操作系统完成,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关.     把进程的pbc移入相应的队列,选择另一个进程执行,并更新pbc。   3.进程的阻塞     正在执行的进程,由于期待的某些事件未发生,入请求系统资源失败,等待某种操作的完成,新数据尚未到达或无新工作等。则由系统自动执行阻塞,使自己由运行状态变为阻塞状态。进程阻塞是进程自身的一种主动行为,因此只有处于运行状态的进程(获得cpu),才可能将其转换为阻塞状态。当进程进入阻塞状态

ios面试题目(一)

只愿长相守 提交于 2020-02-12 02:23:40
1.多线程在实际现实中有哪些应用?(网络操作和大量图片处理不算) 通常耗时的操作都会放在子线程里处理,然后再回到主线程来显示。下面举几个例子: 我们要从数据库提取数据还要将数据分组后显示,那么就会开个子线程来处理,处理完成后才去刷新UI显示。 拍照后,会在子线程处理图片,完成后才回到主线程来显示图片。拍照出来的图片太大了,因此要做处理。 音频、视频处理会在子线程来操作 文件较大时,文件操作会在子线程中处理 做客户端与服务端数据同步时,会在后台闲时自动同步 2、如果app比较大,怎么样减少app的大小? 参考答案: 将build setting中的Optimization Level设置为Fastest, Smallest [-Os],在发布模式下,默认就是这样设置的 将build setting 中的Strip Debug Symbols During Copy设置为YES,在发布模式下,默认就是这样设置的 资源文件查找出所有未使用的,去掉这些永远不会使用的资源文件 对嵌入App的音频进行压缩处理 3、你在迭代开发中是怎么处理版本兼容问题? 参考答案: 版本迭代一定要注意兼容老版本,比如新增了字段或者去掉了某些不再使用的字段,不能引起应用闪退。我们这里只谈程序代码兼容新老版本问题,不考虑业务。因为业务是要求后台来兼容的,通常接口会有版本号控制,用于兼容不同版本的客户端。

右值

老子叫甜甜 提交于 2020-02-12 01:51:31
先来几个快速问答: 右值什么时候出现的?右值早就有了,右值引用直到c++11才有的 右值引用有什么用?为了减少拷贝。 为什么右值引用能减少拷贝?右值赋值给右值引用变量的时候,直接将右值对应的地址交给右值引用变量,相当于对应的内存换了个马甲。 什么时候用右值引用?一般都是将左值转换成右值,然后赋值给右值引用,来减少拷贝。 为了区分左右值,看几个例子,来自CSDN: int a = 10; int b = 20; int *pFlag = &a; vector<int> vctTemp; vctTemp.push_back(1); string str1 = "hello "; string str2 = "world"; const int &m = 1; 请问,a,b, a+b, a++, ++a, pFlag, *pFlag, vctTemp[0], 100, string("hello"), str1, str1+str2, m分别是左值还是右值? a和b都是持久对象(可以对其取地址),是左值; a+b是临时对象(不可以对其取地址),是右值; a++是先取出持久对象a的一份拷贝,再使持久对象a的值加1,最后返回那份拷贝,而那份拷贝是临时对象(不可以对其取地址),故其是右值; ++a则是使持久对象a的值加1,并返回那个持久对象a本身(可以对其取地址),故其是左值; pFlag和

iOS面试知识点

旧时模样 提交于 2020-02-12 01:19:36
1 iOS基础 1.1 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生一个新的指向这个对象的指针,那么就是有两个指针指向同一个对象,这个对象销毁后两个指针都应该置空。深拷贝是对一个对象进行拷贝,相当于对对象进行复制,产生一个新的对象,那么就有两个指针分别指向两个对象。当一个对象改变或者被销毁后拷贝出来的新的对象不受影响。 实现深拷贝需要实现NSCoying协议,实现- (id)copyWithZone:(NSZone *)zone 方法。当对一个property属性含有copy修饰符的时候,在进行赋值操作的时候实际上就是调用这个方法。 父类实现深拷贝之后,子类只要重写copyWithZone方法,在方法内部调用父类的copyWithZone方法,之后实现自己的属性的处理 父类没有实现深拷贝,子类除了需要对自己的属性进行处理,还要对父类的属性进行处理。 1.2 KVO,NSNotification,delegate及block区别 KVO就是cocoa框架实现的观察者模式,一般同KVC搭配使用,通过KVO可以监测一个值的变化,比如View的高度变化。是一对多的关系,一个值的变化会通知所有的观察者。 NSNotification是通知

Java文件拷贝

若如初见. 提交于 2020-02-11 21:22:47
文件拷贝案例: 将一个已有文件(之前就创建好的)拷贝到另一个位置中。 代码: import java . io . File ; import java . io . FileInputStream ; import java . io . FileNotFoundException ; import java . io . FileOutputStream ; import java . io . IOException ; import java . io . InputStream ; import java . io . OutputStream ; /** * 文件拷贝:文件字节输入,输出流 * 1,创建源 * 2,选择流 * 3,操作(写出内容) * 4,释放资源 * @author Administrator * */ public class Copy { public static void main ( String [ ] args ) { //copy("p.jpg","pcopy.jpg"); copy ( "D:\\JavaCode\\IO_study02\\src\\Copy.java" , "copy.txt" ) ; } public static void copy ( String srcPath , String destPath ) { /

在WINDOWS10下安装caffe

ⅰ亾dé卋堺 提交于 2020-02-11 01:36:34
1.准备材料: 1)caffe源代码: https://github.com/Microsoft/caffe 2)Anaconda2 , Anaconda3 3)VS2013 4)CUDA 7.5 5)CUDNN V5.1 一定要用上面的材料,其他的软件可能会出现莫名其妙的问题。 2. 安装Anaconda3和Anaconda2,把Anaconda3目录中的libs下的库文件Python3.lib,Python36.lib拷贝到Anaconda2目录下的libs中。 3. 安装CUDA7.5。安装完毕后,解压CUDNN V5.1,把BIN,LIB,INCLUDE下的文件拷贝到CUDA7.5的工作目录相应目录里面去。 4. 拷贝caffe源码连同caffe目录到D:\caffe\下。拷贝D:\caffe\caffe\windows\下的CommonSettings.props.example为CommonSettings.props。根据需要用文本编辑器修改CommonSettings.props。主要问题有: 1)CUDA一定要7.5,不要去修改。10.2的尝试配置过,但有很多莫名其妙的错误。 2)如果用了GPU,CPU选项一定要设置为FALSE; 3)启用了python或matlab的支持,那么后面的python路径和matlab路径一定要填写正确; 修改完毕存盘。 5.

Kafka是如何实现高性能的

最后都变了- 提交于 2020-02-10 17:45:47
原创:享学课堂讲师 转发请注明出处 Kafka是一个单机支持百万吞吐的高效中间件,在互联网领域经常将它用作消息队列,那么Kafka是如何实现这么性能的呢? 宏观架构层面利用Partition实现并行处理 Kafka中每个Topic都包含一个或多个Partition,不同Partition可位于不同节点。同时Partition在物理上对应一个本地文件夹,每个Partition包含一个或多个Segment,每个Segment包含一个数据文件和一个与之对应的索引文件。在逻辑上,可以把一个Partition当作一个非常长的数组,可通过这个“数组”的索引(offset)去访问其数据。 一方面,由于不同Partition可位于不同机器,因此可以充分利用集群优势,实现机器间的并行处理。另一方面,由于Partition在物理上对应一个文件夹,即使多个Partition位于同一个节点,也可通过配置让同一节点上的不同Partition置于不同的磁盘上,从而实现磁盘间的并行处理,充分发挥多磁盘的优势。 具体实现层面高效使用磁盘特性和操作系统特性 将写磁盘的过程变为顺序写 Kafka的整个设计中,Partition相当于一个非常长的数组,而Broker接收到的所有消息顺序写入这个大数组中。同时Consumer通过Offset顺序消费这些数据,并且不删除已经消费的数据,从而避免了随机写磁盘的过程。