鍍金池/ 問(wèn)答/Python/ python實(shí)例傳入?yún)?shù)為列表時(shí)出問(wèn)題

python實(shí)例傳入?yún)?shù)為列表時(shí)出問(wèn)題

我創(chuàng)建了一個(gè)實(shí)例,實(shí)現(xiàn)了去除列表元素和返回列表的功能。而在導(dǎo)入?yún)?shù)(參數(shù)為列表)后,有一個(gè)不太相關(guān)的列表也發(fā)生同樣的改變了,懵逼!


版本: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"            #  一,此處作驗(yà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              #  二,只在這里使用過(guò)列表「card」

    assigncard = AssignCard(insertsome)
    assigncard.assign()

    print "end card: ", card, "\n"    
    print "end insretsome: ", insertsome, "\n"    
    

我的問(wèn)題:代碼中,我根本沒(méi)有對(duì)列表「card」進(jìn)行任何操作,只在(# 二)處賦值給變量「insertsome」,但在把「insertsome」傳入到實(shí)例「assigncard」后,列表「card」與被其賦值的「insertsome」也發(fā)生了函數(shù)「assign」中同樣操作:去除列表元素

這是為何呢,敬請(qǐng)指導(dǎo)!

回答
編輯回答
墨染殤

card 是個(gè)列表對(duì)象,self.inserted = inserted 這使得 insertedcard 都是指向同一個(gè)列表對(duì)象的。此時(shí),操作 inserted 就是操作 card 。

如果要分開(kāi),可以另外生成一個(gè)列表 self.inserted = list(inserted)。

2017年1月30日 14:12