码迷,mamicode.com
首页 > 其他好文 > 详细

同一性和切片副本

时间:2018-04-01 18:50:07      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:nbsp   引用   不可变   为什么   style   基础教程   python   结构   情况   

  《python基础教程(第2版)》中有两个例子,可以解释同一性和副本的有关概念,现举例如下:

‘‘‘

  字符串(以及数字和元组)是不可变的,即无法被修改(也就是说只能用新的值覆盖)。所以它们做参数的时候也就无需多做介绍。但是考虑一下如果将可变的数据结构如列表用作参数的时候会发生什么:

 

def change(n):
    n[0] = Mr. Gumby

names = [Mrs. Entity, Mrs. Thing]
change(names)

names
[Mr. Gumby, Mrs. Thing]      

 

‘‘‘

  我们发现,参数被改变了,我们可以分析一下,为什么参数会被改变:

                                                  n---------names--------列表[‘Mrs. Entity‘, ‘Mrs. Thing‘]

  其中names和n都同时引用了同一个列表。那么,n如果发生变化,names也势必发生变化。

 

  为了避免这种情况,我们可以复制一个列表的副本:

 

def change(n):
    n[0] = Mr. Gumby

names = [Mrs. Entity, Mrs. Thing]
change(names[:])

names
[Mrs. Entity, Mrs. Thing]
>>> names[:] is names
False
>>> names[:] == names
True

                                                                                                                         

                                                        n---------names[:]副本 <-----------names------------列表[‘Mrs. Entity‘, ‘Mrs. Thing‘]     

  现在参数n对应的是一个副本,而副本和names不同一,所以原始的列表是安全的。             

 

同一性和切片副本

标签:nbsp   引用   不可变   为什么   style   基础教程   python   结构   情况   

原文地址:https://www.cnblogs.com/cnhkzyy/p/8687495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!