タグ付けされた質問 「mutable」

13
サブリスト全体に予期せず反映されたリストの変更のリスト
Pythonでリストのリストを作成する必要があったので、次のように入力しました。 myList = [[1] * 4] * 3 リストは次のようになりました。 [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]] 次に、最も内側の値の1つを変更しました。 myList[0][0] = 5 今私のリストは次のようになります: [[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]] これは私が欲しかったことや期待したことではありません。誰かが何が起こっているのか、そしてそれをどのように回避するか説明できますか?

18
'mutable'キーワードには、変数をconst関数で変更できるようにする以外の目的がありますか?
しばらく前に、クラスのメンバー変数をmutableキーワードでマークするコードを見つけました。私が見る限り、constメソッド内の変数を変更できます。 class Foo { private: mutable bool done_; public: void doSomething() const { ...; done_ = true; } }; これがこのキーワードの唯一の使用ですか、それとも見た目以上のものですか?それ以来、クラスでこの手法を使用して、スレッドセーフな理由で関数をロックboost::mutexできるミュータブルとしてマークしましたconstが、正直なところ、少しハックのように感じます。
527 c++  keyword  mutable 



16
不変型と可変型
不変型とは何なのか混乱しています。私のfloatオブジェクトが不変であると考えられていることを知っています。 class RoundFloat(float): def __new__(cls, val): return float.__new__(cls, round(val, 2)) これは、クラスの構造/階層のために不変であると見なされていますか?つまりfloat、クラスの最上位にあり、独自のメソッド呼び出しです。このタイプの例と似ています(たとえ私の本にdict変更可能とありますが): class SortedKeyDict(dict): def __new__(cls, val): return dict.__new__(cls, val.clear()) これに対して、次のタイプの例では、ミュータブルにはクラス内にメソッドがあります。 class SortedKeyDict_a(dict): def example(self): return self.keys() また、最後のについて、class(SortedKeyDict_a)このタイプのセットをそれに渡した場合: d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2)) exampleメソッドを呼び出さずに、辞書を返します。エラーとしてフラグを立てます。クラスに整数を渡してみましたが、エラーは報告されませんでした。SortedKeyDict__new__RoundFloat__new__

11
可変オブジェクトと不変オブジェクト
私は、可変オブジェクトと不変オブジェクトの両方を理解しようとしています。可変オブジェクトを使用すると、多くの悪い結果(たとえば、メソッドから文字列の配列を返すなど)が発生しますが、これによる悪影響について理解できません。可変オブジェクトの使用に関するベストプラクティスは何ですか?可能な限り回避する必要がありますか?

10
Pythonで変更可能な名前付きタプルの存在?
誰かがnamedtupleを修正したり、変更可能なオブジェクトで機能するように代替クラスを提供したりできますか? 主に読みやすくするために、これを行うnamedtupleに似たものを望みます。 from Camelot import namedgroup Point = namedgroup('Point', ['x', 'y']) p = Point(0, 0) p.x = 10 >>> p Point(x=10, y=0) >>> p.x *= 10 Point(x=100, y=0) 結果のオブジェクトをピクルすることが可能でなければなりません。また、名前付きタプルの特性に従って、表現されるときの出力の順序は、オブジェクトを構築するときのパラメーターリストの順序と一致する必要があります。

10
整数は不変
これはおそらく非常に愚かであることは知っていますが、多くの場合、JavaのIntegerクラスは不変であると主張していますが、次のコードは Integer a=3; Integer b=3; a+=b; System.out.println(a); 問題なく実行され、(期待される)結果が得られます。つまり、aの値が実質的に変更されています。それは、整数が変更可能であることを意味しませんか?二次的な質問とちょっとした話題:「不変のクラスはコピーコンストラクタを必要としません」。誰もが理由を説明してくれませんか?

7
Swiftの不変/可変コレクション
Swift言語での可変/不変オブジェクト(配列、辞書、セット、データ)の作成を理解するために、AppleのSwiftプログラミングガイドを参照していました。しかし、Swiftで不変のコレクションを作成する方法を理解できませんでした。 Objective-Cで次のSwiftに相当するものを見たいです 不変の配列 NSArray *imArray = [[NSArray alloc]initWithObjects:@"First",@"Second",@"Third",nil]; 可変配列 NSMutableArray *mArray = [[NSMutableArray alloc]initWithObjects:@"First",@"Second",@"Third",nil]; [mArray addObject:@"Fourth"]; 不変の辞書 NSDictionary *imDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil]; 可変辞書 NSMutableDictionary *mDictionary = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil]; [mDictionary setObject:@"Value3" forKey:@"Key3"];

6
C ++での揮発性と可変性
揮発性と可変性の違いについて質問があります。私は、2つの両方がそれが変更される可能性があることを意味することに気づきました。ほかに何か?それらは同じものですか?違いは何ですか?それらはどこに適用できますか?なぜ2つのアイデアが提案されているのですか?それらを別の方法で使用する方法は? どうもありがとう。
85 c++  volatile  mutable 

6
配列から可変リストを作成しますか?
配列Listの内容を変更するために、に変換したい配列があります。 スタックオーバーフローは、アドレスという質問/回答のたくさん持っているArrays.asList()とどのようにそれが唯一の根本的な配列のリストビューを提供し、そしてどのように結果の一覧を操作しようとすると、一般的にスローされますUnsupportedOperationException(例えば、リストを操作するために使用される方法としてadd()、remove()など)があるがによって提供されるリスト実装では実装されていませんArrays.asList()。 しかし、配列を可変リストに変換する方法の例を見つけることができません。配列とput()各値をループして新しいリストに入れることができると思いますが、これを行うためのインターフェイスが存在するかどうか疑問に思っています。
85 java  arrays  list  mutable 

5
F#:変更可能vs.参照
まず、この質問が重複している可能性があることを認めます。私に知らせて。 可変性が必要な状況での一般的な「ベストプラクティス」が何であるかを知りたいです。F#は、このための2つの機能を提供let mutableしているようです。「ほとんどの」言語の変数のように機能するように見えるバインディングと、ref使用するために明示的な逆参照を必要とする参照セル(関数で作成)です。 どちらか一方に「強制」されるケースがいくつかあります。.NET相互運用機能はで可変を使用する傾向が<-あり、ワークフロー計算refでは:=。で使用する必要があります。したがって、これらのケースはかなり明確ですが、これらのシナリオの外で独自の可変変数を作成するときに何をすべきか興味があります。あるスタイルが他のスタイルよりも優れている点は何ですか?(おそらく、実装についてさらに洞察することが役立つでしょう。) ありがとう!
82 f#  mutable 

6
可変関数の引数のデフォルト値の適切な使用法は?
関数の引数のデフォルト値として可変オブジェクトを設定することは、Pythonでよくある間違いです。これは、DavidGoodgerによるこの優れた記事から抜粋した例です。 >>> def bad_append(new_item, a_list=[]): a_list.append(new_item) return a_list >>> print bad_append('one') ['one'] >>> print bad_append('two') ['one', 'two'] これが発生する理由の説明はここにあります。 そして今私の質問のために:この構文の良いユースケースはありますか? つまり、それに遭遇したすべての人が同じ間違いを犯し、それをデバッグし、問題を理解し、そこからそれを回避しようとすると、そのような構文にはどのような用途がありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.