python3之深浅copy对比

作者:无名 - 其它综合 -
一、赋值对比

1、列表

l1=[1,2,3]
l2=l1
l1.append(#39;a#39;)
print(l1,l2)#[1,2,3,#39;a#39;][1,2,3,#39;a#39;]
print(id(l1),id(l2))#4349984843499848
#可以看到两个列表的值以及id值相同,对应的是同一个内存地址

2、字典

dic={#39;name#39;:#39;barry#39;}
dic1=dic
dic[#39;age#39;]=18
print(dic,dic1)#{#39;name#39;:#39;barry#39;,#39;age#39;:18}{#39;name#39;:#39;barry#39;,#39;age#39;:18}
print(id(dic),id(dic1))#3115734431157344
#可以看到两个字典的值以及id值相同,对应的是同一个内存地址


3、字符串

s=#39;alex#39;
s1=s
s2=s.replace(#39;a#39;,#39;a#39;)
print(s,s1,s2)#alexalexalex
print(id(s),id(s1),id(s2))#310402083104020831040376
#赋值是同一个内存地址,替换字符串后的变量s2是另外的地址


二、深浅copy

1、浅copy

对于浅copy来说,第一层创建的是新的内存地址。而从第二层开始,指向的是同一个内存地址,所有,对于第二层以及更深的层数来说,保持一致性。

# 1、普通浅copy

l1=[1,2,3,4]
l2=l1.copy()
l1.append(#39;a#39;)
print(l1,l2)#[1,2,3,4,#39;a#39;][1,2,3,4]
print(id(l1),id(l2))#3707732037078664
#id内存地址不一样,创建了两个地址空间,一个改变,另一个不会变化

# 2、嵌套浅copy


l1=[1,[22,33,44],3,4,]
l2=l1.copy()
l1[1].append(#39;a#39;)
print(l1,id(l1),l2,id(l2))#[1,[22,33,44,#39;a#39;],3,4][1,[22,33,44,#39;a#39;],3,4]
print(id(l1),id(l2))#4317351243173256
print(id(l1[1]),id(l2[1]))#4317216843172168
#第一层都是独立的的。从第二层开始都是是公用的,改一个都会变。
l1=[1,[22,33,44],3,4,]
l2=l1.copy()
l1[0]=111
print(l1,l2)#[111,[22,33,44],3,4][1,[22,33,44],3,4]
print(id(l1),id(l2))#4337012043369864
#可以看到第一层都是独立的,改一个不影响另一个的结果

2、 深copy.deepcopy()

对于深copy来说,两个是完全独立的,改变任意一个的元素(无论是多少层),另一个绝不会改变。


importcopy
l1=[1,[22,33,44],3,4,]
l2=copy.deepcopy(l1)
#改变第一层
l1[0]=111
print(l1,l2)#[111,[22,33,44],3,4][1,[22,33,44],3,4]
print(id(l1),id(l2))#4323853643239048
#改变第二层
l1[1].append(#39;a#39;)
print(l1,l2)#[111,[22,33,44,#39;a#39;],3,4][1,[22,33,44],3,4]
print(id(l1),id(l2))#4323853643239048



python3之深浅copy对比

原文地址:http://blog.51cto.com/qidian510/2156222

IT人知识库 原文地址:http://www.itpeo.net/9999/4539846.html





JSP基础--九大内置对象

jsp九大内置对象 object findattribute(string name):依次在page、request ...

Markdown:Syntax

markdown: syntax main basics syntax license ...

docker部署nginx服务器

1,下载nginx镜像 docker pull nginx 2,启动 docker run --name runo ...

wepy小程序入门和项目初始化

前言: wepy小程序项目初始化的操作,官方文档看了好几遍,感觉写得不是很清楚。 这篇写得挺好的:小程序开发之wepy ...

EffectiveJavaP2CreatingandDestroyingObjects

this chapter concerns creating and destorying objects : wh ...

vue中的ref,refs使用

使用elementui时,tree遇到的坑 1、发现,this.$refs每次都是undefined; 问题原因:渲染组 ...

Leetcode672.灯泡开关II

灯泡开关ii 现有一个房间,墙上挂有n只已经打开的灯泡和 4 个按钮。在进行了m次未知操作后,你需要返回这n只灯泡可能有 ...

golang基础学习-strings包常用函数学习

package main import ( "fmt" "strings" ) //strfunc 字符串说明 ...

C#基础篇之语言和框架介绍

1.如何描述c#和.net的关系? .net的是平台,c#是为了微软公司为了.net平台开发的面向对象语言。 2.c# ...

Python_re模块

一、re简介   正则表达式是一种对字符串(包括普通字符、非打印字符、通用字符(称为原子)、特殊字符(称为元字符))操作 ...

PHP代码规范之PSR-1

1.概述 1. 必须使用lt;php gt; 或是lt;=gt;这两种标签 2. php代码中必须使用utf-8 wit ...

安装使用Hadoop遇到的一些问题

安装完后却不能运行hadoop,仔细查看日志信息,hadoop记录了详尽的日志信息,日志文件保存在logs文件夹内。 ...

c++string去除首尾空格、\n、\r、\t

string s = " test "; size_t n = s.find_last_not ...

.Net基础之3——运算符

(3)convert类型转换 1、类型如果相兼容的两个变量,可以使用自动类型转换或者显示类型转换。 但是如果两个类型的变 ...

iOS的match函数

1.求余 extern double fmod(double,double); fmod(10.2,3) =1.2 ...

AndroidStudio解决ADB检测不到手机导致无法连接的问题

adb的全称是android debug bridge,是用来管理模拟器和真机的通用调试工具。   开usb调试 ...

Django==>Form组件

django ==gt; form 组件 目录: 1.基本使用 2.form中字段和插件 3.自定义验证规则 4.动态加 ...

「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)

注意:以下都是在mysql目录下的my.ini文件中改写(技术文)。 一、innodb内存优化 innodb用一块内存区 ...

新媒体的冲击,传统企业的出路在哪?

新媒体冲击,传统企业的出路在哪? 在二零壹伍克强总理提出我们进入互联网+时代起,我国正式宣布进入后互联网时代,在互联网新 ...

西南seo大神理解的互联网+

“农村将成为互联网领域的‘沃土’,而非信息时代失联的‘孤岛’。大力发展农村互联网,打造现代智慧农村。在农村产业结构调整、 ...