python序列的深拷贝和浅拷贝
- python中的不可变类型
列举:数值,字符串、元组、字节串
- 数值及字符串“可变”'的假象
num = 123
mystr = 'abc'
print(id(num), num)
print(id(mystr), mystr)
num = 456
mystr = 'def'
print('修改后...')
print(id(num), num)
print(id(mystr), mystr) # 结果:
140704113688128 123
1853358409744 abc
修改...
1853359869712 456
1853361326544 def
表面上是对变量的修改,其实质是重新建立了对象,将引用赋给了变量,原来的对象被系统回收。
- python中的可变类型
列举: 列表、字典、字节数组、对象
- 浅拷贝
浅拷贝只拷贝可变类型的引用,在拷贝后的对象中对可变类型的修改会影响到原对象。
有几种方式实现:
1. 完全切片操作
2. 利用系统函数list(), dict()
3. 利用copy模块的copy函数
ll = ['xiao', ['china', 32]]
la = copy(ll)
lb = copy(ll)
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb)
print('change...')
la[0] = 'zhang'
la[1][0] = 'usa'
la[1][1] = 40
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb) # 结果:
3006259174856 ['xiao', ['china', 32]]
3006259174536 ['xiao', ['china', 32]]
3006259174600 ['xiao', ['china', 32]]
change...
3006259174856 ['xiao', ['usa', 40]]
3006259174536 ['zhang', ['usa', 40]]
3006259174600 ['xiao', ['usa', 40]]
- 深拷贝
对比浅拷贝,深拷贝利用copy模块的deepcopy()函数会完全拷贝出独立的对象来。
ll = ['xiao', ['china', 32]]
la = deepcopy(ll)
lb = deepcopy(ll)
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb)
print('change...')
la[0] = 'zhang'
la[1][0] = 'usa'
la[1][1] = 40
lb[0] = 'wang'
lb[1][0] = 'japan'
lb[1][1] = 49
print(id(ll), ll)
print(id(la), la)
print(id(lb), lb) # 结果:
1957762145864 ['xiao', ['china', 32]]
1957762145544 ['xiao', ['china', 32]]
1957762145672 ['xiao', ['china', 32]]
change...
1957762145864 ['xiao', ['china', 32]]
1957762145544 ['zhang', ['usa', 40]]
1957762145672 ['wang', ['japan', 49]]
- 意外发现
元组中的列表不可以修改吗?
tt = (12, 33, [44, 55, 66])
print(tt)
# 修改
tt[2][0] = 0
print(tt) # 结果:
(12, 33, [44, 55, 66])
(12, 33, [0, 55, 66]) ## 元组中的元素tt[2]不可更改为其他内容,单列表中的元素可以随意修改。
列表中的元组可以修改吗?
dd = [1, 2, 3, 4, (7, 8, 9)]
print(dd)
dd[4] = 0
print(dd) # 结果:
[1, 2, 3, 4, (7, 8, 9)]
[1, 2, 3, 4, 0] ## 列表中元组内容不可修改,但dd[4]的值可修改。
python序列的深拷贝和浅拷贝的更多相关文章
- **Python中的深拷贝和浅拷贝详解
Python中的深拷贝和浅拷贝详解 这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用.可变对象-不可变对象.拷贝等内容. 要说清楚Python中的深浅拷贝,需要 ...
- python中的深拷贝与浅拷贝
深拷贝和浅拷贝 浅拷贝的时候,修改原来的对象,浅拷贝的对象不会发生改变. 1.对象的赋值 对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷 ...
- python中的深拷贝和浅拷贝
python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一 ...
- Python 对象的深拷贝与浅拷贝 -- (转)
本文内容是在<Python核心编程2>上看到的,感觉很有用便写出来,给大家参考参考! 浅拷贝 首先我们使用两种方式来拷贝对象,一种是切片,另外一种是工厂方法.然后使用id函数来看看它们的标 ...
- Python对象拷贝——深拷贝与浅拷贝
对象赋值 浅拷贝 深拷贝 1. 对象赋值 对象的赋值实际上是对对象的引用.也就是说当把一个对象赋值给另一个对象时,只是拷贝了引用.如: >>> t1 = tuple('furzoom ...
- 001 说说Python中的深拷贝和浅拷贝
在Python编程中忽略深拷贝和浅拷贝可能会造成未知的风险. 比如我们打算保存一份原始对象的副本作为上一状态的记录,此后修改原始对象数据时,若是副本对象的数据也发生改变,那么这就是一个严重的错误. 注 ...
- Python赋值语句与深拷贝、浅拷贝的区别
参考:http://stackoverflow.com/questions/17246693/what-exactly-is-the-difference-between-shallow-copy-d ...
- Python list的深拷贝和浅拷贝
深拷贝和浅拷贝 列表存储数据,列表拷贝就是数据备份 浅拷贝 优点:占用内存较少 缺点:修改深层数据,会影响原数据 深拷贝 优点:修改数据,互不影响 缺点:占用内存较大 ""&quo ...
- 浅谈python 复制(深拷贝,浅拷贝)
博客参考:点击这里 python中对象的复制以及浅拷贝,深拷贝是存在差异的,这儿我们主要以可变变量来演示,不可变变量则不存在赋值/拷贝上的问题(下文会有解释),具体差异如下文所示 1.赋值: a=[1 ...
随机推荐
- 线程中sleep和wait方法的区别
sleep() 方法: 线程主动放弃CPU,使得线程在指定的时间内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态.典型地,sleep()被用在等待某个资源就绪的情形:测试发 ...
- robot framework 自动化框架环境搭建
win10 64位系统 1.安装python2.7.15 在官网https://www.python.org/downloads/下载对应版本 在同一台电脑上同时安装Python2和Python3参考 ...
- django 修改字段后,同步数据库,失败:django.db.utils.InternalError: (1054, "Unknown column 'api_config.project_id_id' in 'field list'")
问题原因是,修改字段后,同步失败了,然后执行查询的时候,就会提示这个错误,这个字段没有 最暴力的方法可以直接在数据库中修改字段,但是修改后,models没同步,可能会存在问题,因此开始我的百度之旅(这 ...
- Influxdb根据配置文件启动(Influxdb的数据存储)
1.在Influxdb文件夹下建立一个bat文件 2.文件内容如下: @echo offSETLOCAL :: 获取当前批处理所在路径SET InfluxdP==%~dp0 :: 开启influxdb ...
- String reduction (poj 3401
String reduction Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1360 Accepted: 447 D ...
- 文件的上传与下载实现(react、express,create-react-app脚手架)
项目结构为前后端分离,中间布了一层node. 文件上传 要求:将文件信息等发送到后台. html代码 <input type="file" name="file&q ...
- s6tu
# -*- coding: utf-8 -*- # @Time : 2018/03/30 15:20 # @Author : cxa # @File : liuuchnagtu.py # @Softw ...
- JS各种变量是true或者false列表
如果操作数是一个对象,返回true 如果操作数是一个空字符串,返回false如果操作数是一个非空字符串,返回true如果操作数是数值0,返回false如果操作数是任意非0数值(包括Infinity), ...
- flutter 按键监听
import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() => ru ...
- jQuery DataTables 分页
HTML:================================================================== <div class="ibox-con ...