在Python中建立M x N的陣列

2022-06-26 10:00:11 字數 1019 閱讀 2783

在python中建立m x n的陣列 一般有三種方法:

但是,在使用列表乘法建立的時候會出現問題:

dp = [[0]*2]*2

print(dp) # [[0, 0], [0, 0]]

print(id(dp[0])) #3142462401856

print(id(dp[1])) #3142462401856

dp[0][1] = 2

print(dp) # [[0, 2], [0, 2]]

這說明在二維列表乘法的時候外層只是用了引用,而不是新開闢空間建立陣列. 從位址上也可以看出來,dp[0]dp[1]實際上指向了同乙個物件。因此,當嘗試修改dp[0]中的元素的時候,dp[1]中的對應元素會同時修改。問題在於外層的乘法實際上已經是引用型。

同理,如果一維列表乘法的時候用的就是引用型別的資料,也會出現一樣的情況

class a():

def __init__(self,a=0,b=1):

self.a = a

self.b = b

def change(self,c):

self.a = c

return 1

def __repr__(self):

return "a:[{},{}]".format(self.a,self.b)

if __name__ == "__main__":

test = a(2,3)

print(test) # a:[2,3]

testlist = [test]*3

print(testlist) # [a:[2,3], a:[2,3], a:[2,3]]

test.change(5)

print(test) # a:[5,3]

print(testlist) # [a:[5,3], a:[5,3], a:[5,3]]

python動態建立執行緒 在python中建立執行緒

我有乙個指令碼,我想要乙個功能與另乙個同時執行。我看過的示例 import threading def mythread threading.thread doing something.def mythread2 threading.thread doing something.mythread ...

python在類中建立執行緒

import threading import time class mythread threading.thread def run self for i in range 3 time.sleep 1 msg i m self.name print msg def saypoem self p...

在Python的Django框架中建立和使用模版

如何使用模板系統 讓我們深入研究模板系統,你將會明白它是如何工作的。但我們暫不打算將它與先前建立的檢視結合在一起,因為我們現在的目的是了解它是如何獨立工作的。換言之,通常你會將模板和檢視一起使用,但是我們只是想突出模板系統是乙個python庫,你可以在任何地方使用它,而不僅僅是在django檢視中。...