我创建了一个实例,实现了去除列表元素和返回列表的功能。而在导入参数(参数为列表)后,有一个不太相关的列表也发生同样的改变了,懵逼!
版本:Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)]
# -*- coding: utf-8 -*-
import random
card = range(1, 11)*4 + ["joker"] + ["J"]*4 + ["Q"]*4 + ["K"]*4
class AssignCard(object):
def __init__(self, inserted):
self.inserted = inserted
self.assignfirst = []
self.assignsecond = []
def assign(self):
random.shuffle(self.inserted)
print "begin self.inserted: ", self.inserted, "\n"
# 以下为去除列表元素的操作
while True:
if not(len(self.inserted) == 0):
self.assignfirst.append(self.inserted.pop())
else:
break
print "card: ", card, "\n" # 一,此处作验证
# print "self.inserted: ", self.inserted, "\n"
if not(len(self.inserted) == 0):
self.assignsecond.append(self.inserted.pop())
else:
break
self.assignedcard = [self.assignfirst, self.assignsecond]
return self.assignedcard
if __name__ == "__main__":
insertsome = card # 二,只在这里使用过列表「card」
assigncard = AssignCard(insertsome)
assigncard.assign()
print "end card: ", card, "\n"
print "end insretsome: ", insertsome, "\n"
我的问题:代码中,我根本没有对列表「card」进行任何操作,只在(# 二)处赋值给变量「insertsome」,但在把「insertsome」传入到实例「assigncard」后,列表「card」与被其赋值的「insertsome」也发生了函数「assign」中同样操作:去除列表元素
这是为何呢,敬请指导!
card
是个列表对象,self.inserted = inserted
这使得inserted
和card
都是指向同一个列表对象的。此时,操作inserted
就是操作card
。如果要分开,可以另外生成一个列表
self.inserted = list(inserted)
。