赋值运算与深浅copy
1、复制运算
l1 = [1,2,3,['a','b']]
l2 = l1
l1[0] = 111
print(l1) # [111, 2, 3, ['a', 'b']]
print(l2) # [111, 2, 3, ['a', 'b']] l1[3][0] = 'hello'
print(l1) # [111, 2, 3, ['hello', 'b']]
print(l2) # [111, 2, 3, ['hello', 'b']]
#所以,对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的
2、拷贝 copy
l1 = [1,2,3]
l2 = l1.copy() # copy,在内存中产生了新的地址
print(l1,l2) # [1, 2, 3] [1, 2, 3]
print(id(l1),id(l2)) # 2137678556040 2137678553608
l2.append('a')
print(l1,l2) # [1, 2, 3] [1, 2, 3, 'a'] l3 = [1,2,[4,5,6],3]
l4 = l3.copy()
print(l3,id(l3)) # [1, 2, [4, 5, 6], 3] 2535910547976
print(l4,id(l4)) # [1, 2, [4, 5, 6], 3] 2535910565192
l3.append('a')
print(l3,l4) # [1, 2, [4, 5, 6], 3, 'a'] [1, 2, [4, 5, 6], 3]
l3[2].append('a')
print(l3,l4) # [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6, 'a'], 3]
print(id(l3[2]),id(l4[2])) # 2535910550408 2535910550408
# 对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,
# 指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
3、深拷贝 deepcopy
import copy
l1 = [1,2,[4,5,6],3]
l2 = copy.deepcopy(l1)
print(l1,id(l1)) # [1, 2, [4, 5, 6], 3] 2773191650376
print(l2,id(l2)) # [1, 2, [4, 5, 6], 3] 2773191650888
l1[2].append('a')
print(l1,l2) # [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6], 3]
# 对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
赋值运算与深浅copy的更多相关文章
- Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数
		
一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...
 - Python 集合 深浅copy
		
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
 - 基础数据类型的补充和深浅copy
		
一:关于str 的操作方法补充 1,s.isspace() 判断字符串是否只由空格组成,是,为True,否则,为False. s = ' ' #只能是以至少一个空格组成的字符串(全空格) prin ...
 - python集合深浅copy
		
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
 - Python基础数据类型之集合以及其他和深浅copy
		
一.基础数据类型汇总补充 list 在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错(可以从后向前循环删除,这样不会改变未删元素的索引). 错误示范: lis = [,,, ...
 - python之集合,深浅copy
		
一. 集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
 - python之路day07-集合set的增删查、列表如何排重(效率最高的方法)、深浅copy
		
集合set 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
 - python之数据类型补充、集合、深浅copy
		
一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址 ...
 - day 07 数据类型,集合,深浅copy
		
1.day 06 内容回顾 小数据池 int :-5-256 str:特殊字符 ,*20 ascii:8位 1字节 表示一个字符 unicode:32位 4个字节 , 表示一个字符 字节表示8位表示一 ...
 
随机推荐
- mysql 空间索引的使用
			
CREATE TABLE tb_geo(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(128) NOT NULL,pnt POINT NOT NULL, ...
 - [GO]获取命令行参数
			
package main import ( "os" "fmt" ) func main() { list := os.Args n := len(list) ...
 - webstorm最新破解方法
			
方法来自 Rover12421 大神. 1.从官网下载WebStorm2016.1安装. 2.下载 破解补丁 并解压,记住路径 3.编辑WebStorm安装目录下 bin 文件夹中的 WebStorm ...
 - 阿里云OSS-web直传---在服务端c#签名,浏览器直传
			
OSS web直传---在服务端php签名,浏览器直传 本文:OSS web直传---在服务端c#签名,浏览器直传 其他语言的范例地址:https://help.aliyun.com/document ...
 - windows mobile 只能运行一个程序实例
			
static class Program { [System.Runtime.InteropServices.DllImport("coredll.Dll", SetLastErr ...
 - Maven打包jar项目
			
默认情况下,使用maven打包的jar项目(执行maven install)不会包含其他包引用,要想打包为带其他项目引用的jar,需要加入插件 要得到一个可以直接在命令行通过java命令运行的JAR文 ...
 - [leetcode] 4. Path Sum
			
终于到了二叉树.题目如下: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that ...
 - Reporting Service服务SharePoint集成模式安装配置(6、安装Reporting services Add-in for SharePoint 外接程序)
			
第五步骤 : 安装Reporting services Add-in for SharePoint 外接程序 RS 外接程序是在 SharePoint 服务器上运行用于 SharePoint 产品的 ...
 - winfrom 右下角弹窗(渐渐消失)
			
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
 - C#设计模式--工厂模式之简单模式
			
简单工厂模式定义:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品 ...