• 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序列的深拷贝和浅拷贝的更多相关文章

  1. **Python中的深拷贝和浅拷贝详解

    Python中的深拷贝和浅拷贝详解   这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用.可变对象-不可变对象.拷贝等内容.   要说清楚Python中的深浅拷贝,需要 ...

  2. python中的深拷贝与浅拷贝

    深拷贝和浅拷贝 浅拷贝的时候,修改原来的对象,浅拷贝的对象不会发生改变. 1.对象的赋值 对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷 ...

  3. python中的深拷贝和浅拷贝

    python的复制,深拷贝和浅拷贝的区别   在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一 ...

  4. Python 对象的深拷贝与浅拷贝 -- (转)

    本文内容是在<Python核心编程2>上看到的,感觉很有用便写出来,给大家参考参考! 浅拷贝 首先我们使用两种方式来拷贝对象,一种是切片,另外一种是工厂方法.然后使用id函数来看看它们的标 ...

  5. Python对象拷贝——深拷贝与浅拷贝

    对象赋值 浅拷贝 深拷贝 1. 对象赋值 对象的赋值实际上是对对象的引用.也就是说当把一个对象赋值给另一个对象时,只是拷贝了引用.如: >>> t1 = tuple('furzoom ...

  6. 001 说说Python中的深拷贝和浅拷贝

    在Python编程中忽略深拷贝和浅拷贝可能会造成未知的风险. 比如我们打算保存一份原始对象的副本作为上一状态的记录,此后修改原始对象数据时,若是副本对象的数据也发生改变,那么这就是一个严重的错误. 注 ...

  7. Python赋值语句与深拷贝、浅拷贝的区别

    参考:http://stackoverflow.com/questions/17246693/what-exactly-is-the-difference-between-shallow-copy-d ...

  8. Python list的深拷贝和浅拷贝

    深拷贝和浅拷贝 列表存储数据,列表拷贝就是数据备份 浅拷贝 优点:占用内存较少 缺点:修改深层数据,会影响原数据 深拷贝 优点:修改数据,互不影响 缺点:占用内存较大 ""&quo ...

  9. 浅谈python 复制(深拷贝,浅拷贝)

    博客参考:点击这里 python中对象的复制以及浅拷贝,深拷贝是存在差异的,这儿我们主要以可变变量来演示,不可变变量则不存在赋值/拷贝上的问题(下文会有解释),具体差异如下文所示 1.赋值: a=[1 ...

随机推荐

  1. 类数组对象与 arguments

    类数组对象:拥有一个 length 属性和若干索引属性的对象 var array = ['name', 'age', 'sex']; var arrayLike = { 0: 'name', 1: ' ...

  2. python学习笔记(二十):异常处理

    def calc(a,b): res=a/b return res def main(): money=input('输入多少钱:') months=input('还几个月:') try: res=c ...

  3. php中换行怎么写

    PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性 unix系列用(推荐学习:PHP编程从入门到精通) 1 windows系列用 1 \r\n mac用 1 如: 1 2 3 4 5 6 ...

  4. [CF1081H]Palindromic Magic

    题意:给两个字符串\(a,b\),求出有多少种不同的字符串能通过从第一个串中取出一个回文串,从第二个串中取出一个回文串,按顺序拼接得到. 题解:证明?看官方题解吧 一些定义: 回文串拆分:\(s=ab ...

  5. hadoop平台搭建

    前言 这是小的第一次搭建hadoop平台,写下这篇博客有以下几个目的(ps:本博只记录在linux系统下搭建hadoop的步骤,如果需要了解在其他平台上搭建hadoop的步骤,还请移步): 1.希望大 ...

  6. PHP读取XML文件数据获取节点值

    最近在接入渠道的时候遇到接口返回是xml数据.现在接口数据返回json数据格式比较常见. 如何获取xml里面真正数据? 对象结果集合单个值的强制转换处理.(直接代码说明) demo示例:  创建xml ...

  7. (转)linux 命令访问url: curl http://www.baidu.com/index.html

    转:https://blog.csdn.net/michael1112/article/details/79119424 1.elinks - lynx-like替代角色模式WWW的浏览器 例如: e ...

  8. p4463 [国家集训队] calc

    分析 代码 #include<bits/stdc++.h> using namespace std; ][],Ans; inline int pw(int x,int p){ ; whil ...

  9. MD5加密 及 防止重复提交

    1.JSP页面 <%@page import="cn.gs.ly.app2.MD5Util"%> <%@page import="java.util.U ...

  10. Content-Based Recommender System

    Content-Based Recommender System是基于产品(商品.网页)的内容.属性.关键字,以及目标用户的喜好.行为,这两部分数据来联合计算出,该为目标用户推荐其可能最感兴趣的产品. ...