Pages

Dec 17, 2011

python: list assign(copy)

>>> a = [1,2,3,4,5]
>>> b = a
>>> b[0] = 10
>>> print a
[10,2,3,4,5]
在python中,list的assign有點類似c的pointer,改變b的值同時也會改變a的值,
要作到真正的copy有兩種方法:

1.
>>> b = a[:]
這個作法雖然簡單,但是在nested的結構中會有問題

2.
>>> import copy
>>> b = copy.copy(a)
copy module中又有copy與deepcopy,兩者的差別要再研究研究

reference:
http://docs.python.org/library/copy.html

Dec 7, 2011

bash wrapping 位置錯誤

在bash環境下,紀錄terminal寬度的變數叫做COLUMNS,可以用
$ echo $COLUMNS

查看目前terminal的寬度(字元數)

bash藉由這個變數來決定哪個位置該wrap,改變terminal大小時,通常這個值也會跟著改變,但有時候就會有靈異現象,造成terminal大小改變,但COLUMNS的值卻沒有改變

bash的一個built-in command shopt,或許可以解決這個問題,shopt中有一個選項checkwinsize,會在每次做完一個指令後檢查terminal的大小,並視情況更新LINES & COLUMNS,可以把他加在 ~/.bashrc 裡面
shopt -s checkwinsize

至於效果如何,需要再觀察看看囉

Reference:
Bash Reference Manual
http://www.gnu.org/software/bash/manual/bashref.html#The-Shopt-Builtin