python实例传入参数为列表时出问题

新手上路,请多包涵

我创建了一个实例,实现了去除列表元素和返回列表的功能。而在导入参数(参数为列表)后,有一个不太相关的列表也发生同样的改变了,懵逼!


版本: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」中同样操作:去除列表元素

这是为何呢,敬请指导!

阅读 2.9k
1 个回答

card 是个列表对象,self.inserted = inserted 这使得 insertedcard 都是指向同一个列表对象的。此时,操作 inserted 就是操作 card

如果要分开,可以另外生成一个列表 self.inserted = list(inserted)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题