TA的每日心情 | 开心 2019-3-12 10:49 |
---|
签到天数: 1 天 [LV.1]初来乍到
新手上路
- 积分
- 36
|
copy模块
这儿的复制有浅复制(copy)和深复制(deepcopy)
区别:把包含几个对象的列表复制以后,如果源列表中的一个元素的属性改变则目标列表也跟随着变,如果想避免这个情况则用copy.deepcopy()函数。
添加和删除源列表中的元素,无论是浅复制还是深复制都没有影响。
>>> #下面这个例子我们创建了一个人的类,赋予了age、sex属性,初始一个人并复制一群人
>>> class People:
def __init__(self,age,sex):
self.age = age
self.sex = sex
>>> p1 = People(6,boy)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
p1 = People(6,boy)
NameError: name 'boy' is not defined
>>> p1 = People(6,'boy')
>>> # 初始化完成后开始复制
>>> import copy
>>> p1 = People(6,'boy')
>>> p2 = copy.copy(p1)
>>> print(p2.age)
6
>>> print(p2.sex)
boy
>>> # 完成了单个复制,开始进行多个复制
>>> p3 = People(8,'girl')
>>> list1 = [p1,p2,p3]
>>> list2 = copy.copy(list1)
>>> print(list2[1].age)
6
# 用循环把里面的值打印出来,用while实现
>>> long_list2 = len(list2)
>>> i = 0
>>> while i < long_list2:
print(list2[i].age)
print(list2[i].sex)
i = i + 1
6
boy
6
boy
8
girl
>>>
#用for+range来实现,注意range里面的最后一个值是小于,并不包括这个值
>>> for i in range(0,long_list2):
print(list1[i].age)
print(list1[i].sex)
i = i + 1
6
boy
6
boy
8
girl
>>>
#直接在range里面调用函数来得到数组的长度也是可以的
>>> for i in range(0,len(list2)):
print(list1[i].age)
print(list1[i].sex)
i = i + 1
6
boy
6
boy
8
girl
>>>
#修改一个源列表中一个元素的属性,目标列表中的会跟着改变
>>> list1[1].age = 7
>>> for i in range(0,len(list2)):
print(list2[i].age)
print(list2[i].sex)
i = i + 1
6
boy
7
boy
8
girl
>>> #修改源列表中的一个属性,目标表中属性会跟着改变的,
>>> #下面来在源列表中删除和添加一个元素,来看看目标表中会发生什么
>>> del list1[1]
>>> for i in range(0,len(list1)):
print(list1[i].age)
print(list1[i].sex)
i = i + 1
6
boy
8
girl
>>> for i in range(0,len(list2)):
print(list2[i].age)
print(list2[i].sex)
i = i + 1
6
boy
7
boy
8
girl
>>>
# 源的删和添加是对目标无影响的
>>> p4 = People(9,'girl')
>>> list1.append(p4)
>>> for i in range(0,len(list1)):
print(list1[i].age)
print(list1[i].sex)
i = i + 1
6
boy
8
girl
9
girl
>>> for i in range(0,len(list2)):
print(list2[i].age)
print(list2[i].sex)
i = i + 1
6
boy
7
boy
8
girl
|
|