2011-04-13 28 views
2

我有一個返回元組的sqlalchemy查詢。我將這個元組傳遞給一個函數,並且由於它是一個不可變類型,所以在被調用函數中創建了一個新的元組實例。函數調用中的Python不可變類型

python如何處理內存管理?是創建的元組的完整副本,還是使用了一些巧妙的「拷貝寫/零拷貝」功能?

對我來說,問題在於這些原始元組可能會消耗大量內存,並且只需調用一個函數對它們進行一些處理,Python將有效地將內存消耗加倍。

除了在線編寫代碼之外,我該如何避免這種低效?

回答

2

當你調用一個函數時,只是元組的引用被傳遞,而不是副本。它不可變的事實並不意味着它將被複制到一個函數調用中,只是你不能修改它。

+0

好的,根據:[鏈接] http://www.testingreflections.com/node/view/5126「一些對象,比如字符串,元組和數字是不可變的,在函數/方法內改變它們會創建一個新的實例和函數/方法外的原始實例不會改變。「這是否意味着只有在嘗試修改傳遞的元組/字符串時才創建新實例? – Chris 2011-04-13 17:33:11

+1

是的,你通過值(小)傳遞引用,但它引用的對象(大)不被複制。 – yan 2011-04-13 17:34:22

0

Python按值傳遞對象的引用。所以你不必擔心它。