python列表中的赋值与深浅拷贝
首先创建一个列表
a=[[1,2,3],4,5,6]
一、赋值
a=[[1,2,3],4,5,6]
b=a
a[0][1]='tom'
print(a)
print(b)
结果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]
a=[[1,2,3],4,5,6]
b=a
b[0][1]='tom'
print(a)
print(b)
结果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]
总结:赋值不管是对a列表改变还是对b列表改变,
只要改变其中一个,另一个也会跟着变,这是因为a
和b共用一块内存,没有创建新的内存,
他们是相同的,他们指向同一个内存区域。 二、浅拷贝 [:]or copy()
a=[[1,2,3],4,5,6]
b=a.copy()
b[0][1]='tom'
print(a)
print(b)
结果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]
a=[[1,2,3],4,5,6]
b=a.copy()
a[0][1]='tom'
print(a)
print(b)
结果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]
a=[[1,2,3],4,5,6]
b=a.copy()
b[1]='tom'
print(a)
print(b)
结果:
[[1, 2, 3], 4, 5, 6]
[[1, 2, 3], 'tom', 5, 6]
a=[[1,2,3],4,5,6]
b=a.copy()
a[1]='tom'
print(a)
print(b)
结果:
[[1, 2, 3], 'tom', 5, 6]
[[1, 2, 3], 4, 5, 6]
总结:从上面代码可以看出来浅拷贝是重新开辟一块内存,拷贝第一层数据,不拷贝内部子元素
在本代码中,b列表重新开辟了一块内存放元素【b【0】,4,5,6】,也就是第一层内容,
然后b【0】的位置指向了a【0】指向的内存位置
三、深拷贝 使用copy函数
重新开辟一块内存,存放拷贝列表的所有内容。a集合与b集合互不影响
import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
a[1]='tom'
print(a)
print(b)
结果:
[[1, 2, 3], 'tom', 5, 6]
[[1, 2, 3], 4, 5, 6]
import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
b[1]='tom'
print(a)
print(b)
结果:
[[1, 2, 3], 4, 5, 6]
[[1, 2, 3], 'tom', 5, 6]
import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
b[0][1]='tom'
print(a)
print(b)
结果;
[[1, 2, 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]
import copy
a=[[1,2,3],4,5,6]
b=copy.deepcopy(a)
a[0][1]='tom'
print(a)
print(b)
结果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 2, 3], 4, 5, 6]
copy函数也可以浅拷贝:
import copy
a=[[1,2,3],4,5,6]
b=copy.copy(a)
a[0][1]='tom'
print(a)
print(b)
结果:
[[1, 'tom', 3], 4, 5, 6]
[[1, 'tom', 3], 4, 5, 6]
python列表中的赋值与深浅拷贝的更多相关文章
- 【python】变量的赋值、深浅拷贝
python——赋值与深浅拷贝 https://www.cnblogs.com/Eva-J/p/5534037.html 啥都不说,看这个博主的文章!
- python基础知识5——赋值与深浅拷贝——整数和字符串,列表元组字典
深浅copy 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 import copy 2 # ######### 数字.字符串 #### ...
- python中的“赋值与深浅拷贝”
Python中,赋值与拷贝(深/浅拷贝)之间是有差异的,这主要源于数据在内存中的存放问题,本文将对此加以探讨. 1 赋值(添加名字) 赋值不会改变内存中数据存放状态,比如在内存中存在一个名为data的 ...
- python中的赋值与深浅拷贝的区别
import copy lt = [1, 2, [3, 4]] # 赋值会增加一个引用,访问的都是同一数据 # lt2 = lt # 浅拷贝:只拷贝对象本身,里面的元素只会增加一个引用 lt2 = l ...
- python语法基础-基础-赋值与深浅拷贝
##################################### 预备知识一——python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时 ...
- python中的赋值和深浅拷贝
python中,A object = B object 是一种赋值操作,赋的值不是一个对象在内存中的空间,而只是这个对象在内存中的位置 . 此时当B对象里面的内容发生更改的时候,A对象也自然而然的 ...
- python中的赋值与深浅拷贝
Python当中对于拷贝,分为两种类型.一种是数字和字符串,另一种就是列表.元组.字典等其他类型了. 一.数字和字符串的拷贝 1.赋值 举个栗子: a1 = 123123 a2 = 123123 # ...
- python——赋值与深浅拷贝
初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...
- python列表中的深浅copy
列表中的赋值和平常的赋值是不一样的,看下面的代码: In [1]: a = 1 In [2]: b = a In [3]: a Out[3]: 1 In [4]: b Out[4]: 1 In [5] ...
随机推荐
- <s:property>的用法
1,访问Action值栈中的普通属性: <s:property value="attrName"/> 2,访问Action值栈中的对象属性(要有get set方法): ...
- spring mvc 注解扫描问题 ,扫描不到controller, use-default-filters="false"
今天搭了个spring mvc项目,怎么也扫描不到controller,最后发现问题在use-default-filters="false"上面,乱copy出的问题 (默认值是tr ...
- Teradata 认证系列 - 3. 关系型数据库的概念
本课的学习目标 定义关系型数据库关联的术语 讨论主键的功能 讨论外键的功能 列出关系型数据库的优势 描述星型架构和第三范式数据模型的区别 什么是数据库?数据库是一个应用永久保存数据的集合表现在: 逻辑 ...
- java 基础 03 运算符 分支结构 循环结构
今天内容: (1)运算符 (2)分支结构 (3)循环结构 1运算符 1.1赋值运算符 (1)简单赋值 = 表示赋值运算符,用于将=右边的数据赋值给=左边的变量来覆盖原来的数值. 笔试题: ia == ...
- node安装启动服务
一.下载安装包: node下载地址:https://nodejs.org/en/download/,根据自己电脑的配置下载相应的windows64位安装包,下载完成后,进行安装.下面我用的8.9.0版 ...
- grunt配置sass项目自动编译
1.安装Ruby和SASS 首先我们需要在电脑上安装Ruby和SASS.如果您使用的是Mac,您就没必要安装Ruby.如果您使用的是Window系统,你需要安装Ruby. 2.安装Nodejs 由于使 ...
- js为页面元素添加水印
近期有需求为页面部分区域添加上水印,通过在网上找到了js为页面添加水印的方法,后来经过自己的改进,可以实现为页面部分元素添加水印,最终效果如下图: 代码如下: function watermark(s ...
- Shape详解
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...
- NIO(一)缓冲区
I/O的基本概念 同步和异步的概念: 所谓的同步就是在发出一个请求的时候,如果没有得到结果,就不返回.即调用者主动等待返回结果. 所谓的异步:调用之后直接返回结果,一般通过回调函数来处理这个应用. 阻 ...
- 《Python高效开发实战》实战演练——开发Django站点1
6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程.本节通过建立一个消息录入页面演示Django的开发流程及相关技术. 6.12.1 建立项目 在进行D ...