二、Python开发---8、浅拷贝与深拷贝

浅拷贝与深拷贝

    可变(mutable)参数和不可变(immutable)参数

    Python中string、tuple和number是不可变对象,而dict、list等是可变对象;不可变对象在进行重新赋值的时候,实际上是将原始值丢弃,将变量指向一个新值;可变对象的可变性实质上是指更改可变对象中的子对象,比如list中的item元素的更改。

    下文中讨论的赋值,都是基于上述的条件之上的,即操作的都是可变对象(dict、list),如果操作的是不可变对象(string、tuple、number),则不适用。

    直接赋值:其实就是对象的引用(别名)。例如:b=a,则a,b指向的是同一内存,类似于同一事物的两个不同叫法。

a = [1,2,3]     #操作的是可变对象(dict、list)
b = a
print(id(a))    #通过id查看变量在内存中的地址 输出为1860168
print(id(b))                             #输出为1860168

a[0] = 5        #修改的是a
print(a)        #输出为[5, 2, 3]
print(b)        #输出为[5, 2, 3]

c=3             #操作的是不可变对象(string、tuple、number)
d=c
print(id(c))    #通过id查看变量在内存中的地址 输出为8791403107200
print(id(d))                             #输出为8791403107200

c=8             #修改的是c
print(c)        #输出为8
print(d)        #输出为3

原文地址:https://www.cnblogs.com/lanzhijie/p/11572099.html

时间: 2024-11-13 08:10:10

二、Python开发---8、浅拷贝与深拷贝的相关文章

Python——赋值、浅拷贝、深拷贝

和很多语言一样,Python中也分为简单赋值.浅拷贝.深拷贝这几种“拷贝”方式. 在学习过程中,一开始对浅拷贝理解很模糊.不过经过一系列的实验后,我发现对这三者的概念有了进一步的了解. 一.赋值 赋值算是这三种操作中最常见的了,我们通过一些例子来分析下赋值操作: str例 >>> a = 'hello' >>> b = 'hello' >>> c = a >>> [id(x) for x in a,b,c] [4404120000,

Python赋值、浅拷贝、深拷贝

一.赋值(assignment) >>> a = [1, 2, 3] >>> b = a >>> print(id(a), id(b), sep='\n') 139701469405552 139701469405552 在Python中,用一个变量给另一个变量赋值,其实就是给当前内存中的对象增加一个"标签"而已. 如上例,通过使用内置函数 id() ,可以看出 a 和 b 指向内存中同一个对象.a is b会返回 True . 二

Python 赋值、浅拷贝和深拷贝

初学Python,和C++还是有许多不同.直接赋值.浅拷贝和深拷贝,这三种拷贝对象的操作之间还是有许多的区别.Python语言的版本为2.7,在Pycharm中进行实验. 一.直接赋值 用下面的代码来实验: 1 origin = [1, "string", [1, 3, 5]] 2 Copy = origin 3 print Copy 4 print id(origin), id(Copy) 5 Copy[0] = 5 6 print origin, Copy 7 Copy[1] =

Python中的浅拷贝与深拷贝

以下都是参考资料后,我自己的理解,如有错误希望大家不吝赐教. 大家有没有遇到这样一种情况,对象赋值后,对其中一个变量进行修改,另外一个变量的值也改变了.比如: person = ['name', ['saving', 100]] hubby = person wifey = person hubby[0] = 'joe' wifey[0] = 'jane' print hubby, wifey hubby[1][1] = 50 print hubby, wifey >>>['jane',

Python 中的浅拷贝和深拷贝

1. 列表和字典,直接赋值,都是浅拷贝,即赋值双方指向同一地址,因为 Python 对可变对象按引用传递. >>> a = [1, 2, 3] >>> b = a >>> b [1, 2, 3] >>> a[0] = 'apple' >>> a ['apple', 2, 3] >>> b ['apple', 2, 3] >>> >>> >>> d

python中的浅拷贝和深拷贝

1.浅拷贝 copy.copy() 浅拷贝是拷贝只拷贝最外一层(这里所说的拷贝是重新生成一个内存地址,也就是只有最外层的地址是重新生成) import copy li=[23,45,['wew',35,[33,00]]] li1=copy.copy(li) print(id(li),id(li1)) print(id(li[0]),id(li1[0])) print(id(li[2][1]),id(li1[2][1])) #输出:35540704 5872576 # 1625084720 162

赋值、浅拷贝、深拷贝之我理解

(一)2个为什么 先通过2个为什么来了解一下python内存中变量的存储情况. >>> name = [1,2,3,["alex","rain"]] >>> name2 = name.copy() # 将原列表copy一份赋值给name2 >>> print(name) [1, 2, 3, ['alex', 'rain']] >>> print(name2) [1, 2, 3, ['alex',

python中关于赋值、浅拷贝与深拷贝的问题

Python中关于对象复制有三种类型的使用方式,赋值.浅拷贝与深拷贝.他们既有区别又有联系,刚好最近碰到这一类的问题,研究下. 一.赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不同.如下: list_a = [1,2,3,"hello",["python","C++"]] list_b = list_a 这种情况下,list_b和list_a是一样的,他们指向同一片内存,list_b不过是list_a的别名,是引用. 我们可

一入python深似海--浅拷贝与深拷贝

python中有一个模块copy,deepcopy函数用于深拷贝,copy函数用于浅拷贝.要理解浅拷贝,必须先弄清楚python中的引用. 引用 Python中一切都是对象,变量中存放的是对象的引用.这是一个普遍的法则.可以说 Python 没有赋值,只有引用.如,a=1,变量a只是整数对象1的引用. 可变对象与不可变对象及其引用 一.不可变对象 不可变对象包括:数字,字符串,元组. 由于Python中的变量存放的是对象引用,所以对于不可变对象而言,尽管对象本身不可变,但变量的对象引用是可变的.