我寫了下面的函數來完成列表排列:Python的奇怪行爲功能
def makePermutatedList(original_list,new_list=[]):
for _ in range(len(original_list)):
new_list.extend(original_list)
x=original_list.pop(0)
original_list.insert(len(original_list),x)
return new_list
,並將它保存到一個文件名爲my_list_module.py(這本身就是一個包叫做my_modules內)。現在,從另一個文件我導入包/模塊和運行makePermutatedList()
:
import my_modules.my_list_module
a=my_modules.my_list_module.makePermutatedList(["jurij","neli","julian"])
print a
b=my_modules.my_list_module.makePermutatedList([1,2,3])
print b
,輸出是:
['jurij', 'neli', 'julian', 'neli', 'julian', 'jurij', 'julian', 'jurij', 'neli']
['jurij', 'neli', 'julian', 'neli', 'julian', 'jurij', 'julian', 'jurij', 'neli', 1, 2, 3, 2, 3, 1, 3, 1, 2]
所有的a
也已複製在b
內容雖然我已經叫該函數具有不同參數2次。這是爲什麼發生?
編輯
我其實想用makePermutatedList()
使聲音文件的矩陣。我現在已經糾正了makePermutatedList()
這樣:
def makePermutatedList(original_list,new_list=None):
if new_list==None:
new_list=[]
for _ in range(len(original_list)):
new_list.extend(original_list)
x=original_list.pop(0)
original_list.insert(len(original_list),x)
return new_list
這現在可以按預期的爲我其他的代碼裏面。然而,當我在這個特定的代碼中使用它下面我得到仍處在snd_list_B複製的行
snd_list_B=my_modules.my_list_module.makePermutatedList(snd_list_B)
後完全snd_list_A任何人任何想法,爲什麼這仍然是怎麼回事?我遠遠沒有考慮這個問題:
sample_paths=["/home/amir/Music/SAMPLESWAP_drum_1/DRUMS and SINGLE HITS/toms/",
"/home/amir/Music/sounds/4409__pinkyfinger__piano-notes-1-octave/",
"/home/amir/Music/sounds/pad-snds/",
"/home/amir/Music/sounds/bongo/"]
#SOUNDS
snd_list=[]
#------------
snd_list_A=[]
snd_list_B=[]
for snd in os.listdir(sample_paths[0]):
snd_list_A.append(sample_paths[0]+snd)
assert len(snd_list_A)==24,"Wrong number of sound files loaded! I need 24 Sound files!sndlist-0"
snd_list_A.sort()
snd_list_A=my_modules.my_list_module.makePermutatedList(snd_list_A)
#~ print "+++++++++++++++++",snd_list_A,len(snd_list_A)
for snd in os.listdir(sample_paths[1]):
snd_list_B.append(sample_paths[1]+snd)
assert len(snd_list_B)==24,"Wrong number of sound files loaded! I need 24 Sound files!sndlist-1"
snd_list_B.sort()
snd_list_B=my_modules.my_list_module.makePermutatedList(snd_list_B)
print "========================================================"
print id(snd_list_B),id(snd_list_A),snd_list_A is snd_list_B
print "========================================================"
這將打印:
========================================================================
140109723798992 140109723798992 True
========================================================================
['here'(http://docs.python-guide.org/en/latest/writing/gotchas/)它expains發生了什麼 – Praveen