作者DearYoyoDon (yoshito)
看板Python
标题[问题] list[:] & list 差别
时间Sun Mar 27 11:17:39 2016
def _product_of_two_vectors_sample_(a, b):
if len(a[0]) != len(b):
return None
# Create the result matrix and fill it with zeros
output_list=[]
temp_row=len(b[0])*[0]
for r in range(len(a)):
-----> output_list.append(temp_row[:]) <-------------------???
for row_index in range(len(a)):
for col_index in range(len(b[0])):
sum=0
for k in range(len(a[0])):
sum=sum+a[row_index][k]*b[k][col_index]
output_list[row_index][col_index]=sum
return output_list
最近在自学
这边有个问题一直不太懂
第8行的附加里面的temp_row[:]和 output_list.append(temp_row)
之间有什麽不同
因为我自己会打temp_row
但是跑出来的结果是错的
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.63.51
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1459048662.A.3E6.html
1F:推 LiloHuang: temp_row[:] 会做出一份拷贝,反之则是参照原先的list 03/27 11:25
2F:→ LiloHuang: >>> foo = [1,2,3] 03/27 11:26
3F:→ LiloHuang: >>> id(foo) 03/27 11:26
4F:→ LiloHuang: 33920784 03/27 11:26
5F:→ LiloHuang: >>> bar = foo 03/27 11:26
6F:→ LiloHuang: >>> id(bar) 03/27 11:26
7F:→ LiloHuang: 33920784 03/27 11:26
8F:→ LiloHuang: >>> bar = foo[:] 03/27 11:26
9F:→ LiloHuang: >>> id(bar) 03/27 11:26
10F:→ LiloHuang: 33919424 03/27 11:27
11F:→ LiloHuang: 留意到了 object id 改变了吗 :P 03/27 11:29
12F:推 ghostreporty: 这有点像Java new的概念 03/27 12:50
13F:→ paulyanzi: 原来有 id 这个东西,id 这功能平常有什麽机会使用到吗 03/27 13:58
14F:→ LiloHuang: 当需要识别物件或者除错时,就是使用 id(obj) 的场合 03/27 15:01
15F:→ LiloHuang: 而 CPython 刚好使用物件的记忆体位址来当作 id 03/27 15:02
17F:→ DearYoyoDon: 大概懂了!! 感谢~ >////< 03/28 01:32
18F:推 ENEP: 推 原来[:]会作copy 那dict有类似的作法吗 03/28 01:54
19F:→ uranusjr: dict 直接呼叫 .copy() 即可 03/28 02:08