Cell 物件
*********

"Cell" 物件用於實現被多個作用域所參照 (reference) 的變數。對於每個這樣
的變數，都會有個 cell 物件為了儲存該值而被建立；參照該值的每個 stack
frame 中的區域性變數包含外部作用域的 cell 參照，它同樣使用了該變數。存
取該值時，將使用 cell 中包含的值而不是 cell 物件本身。這種對 cell 物件
的去除參照 (de-reference) 需要生成的位元組碼 (byte-code) 有支援；存取
時不會自動去除參照。cell 物件在其他地方可能不太有用。

type PyCellObject

   Cell 物件所用之 C 結構。

PyTypeObject PyCell_Type

   對應 cell 物件的物件型別。

int PyCell_Check(PyObject *ob)

   如果 *ob* 是一個 cell 物件則回傳真值；*ob* 必須不為 "NULL"。此函式
   總是會成功執行。

PyObject *PyCell_New(PyObject *ob)
    *回傳值：新的參照。*

   建立並回傳一個包含 *ob* 的新 cell 物件。參數可以為 "NULL"。

PyObject *PyCell_Get(PyObject *cell)
    *回傳值：新的參照。*

   回傳 cell 物件 *cell* 的內容，其可能為 "NULL"。如果 *cell* 不是一個
   cell 物件，則將回傳 "NULL" 並設定例外。

PyObject *PyCell_GET(PyObject *cell)
    *回傳值：借用參照。*

   回傳 cell 物件 *cell* 的內容，但是不檢查 *cell* 是否非 "NULL" 並且
   為一個 cell 物件。

int PyCell_Set(PyObject *cell, PyObject *value)

   將 cell 物件 *cell* 的內容設為 *value*。這將釋放任何對 cell 物件當
   前內容的參照。*value* 可以為 "NULL"。*cell* 必須不為 "NULL"。

   在成功時回傳 "0"。如果 *cell* 不是一個 cell 物件，則將設定例外並回
   傳 "-1"。

void PyCell_SET(PyObject *cell, PyObject *value)

   將 cell 物件 *cell* 的值設為 *value*。不會調整參照計數，並且不會進
   行任何安全檢查；*cell* 必須為非 "NULL" 並且為一個 cell 物件。
