คำถามติดแท็ก mutable

13
รายการการเปลี่ยนแปลงที่แสดงในรายการย่อยโดยไม่คาดคิด
ฉันต้องการสร้างรายการของรายการใน Python ดังนั้นฉันจึงพิมพ์รายการต่อไปนี้: myList = [[1] * 4] * 3 รายการมีลักษณะดังนี้: [[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
คำหลัก 'ไม่แน่นอน' มีวัตถุประสงค์อื่นนอกเหนือจากการอนุญาตให้แก้ไขตัวแปรโดยฟังก์ชัน const หรือไม่
ไม่นานมานี้ฉันพบรหัสบางอย่างที่ทำเครื่องหมายตัวแปรสมาชิกของคลาสด้วยmutableคำหลัก เท่าที่ฉันเห็นมันก็ช่วยให้คุณสามารถปรับเปลี่ยนตัวแปรในconstวิธีการ: class Foo { private: mutable bool done_; public: void doSomething() const { ...; done_ = true; } }; นี่เป็นเพียงการใช้คำหลักนี้เท่านั้นหรือมากกว่าที่จะเป็นไปตามตา? ฉันได้ใช้เทคนิคนี้ในชั้นเรียนทำเครื่องหมายboost::mutexเป็นconstฟังก์ชั่นที่ไม่อนุญาตให้ล็อคเพื่อเหตุผลด้านความปลอดภัยของเธรด แต่ตามจริงแล้วมันรู้สึกเหมือนแฮ็คเล็กน้อย
527 c++  keyword  mutable 

16
ทำไมการเปลี่ยนแปลงที่ไม่แน่นอนของ“ ความชั่วร้าย”?
การติดตามการสนทนาที่นี่ดังนั้นฉันได้อ่านหลายครั้งแล้วคำพูดที่ว่าโครงสร้างที่ไม่แน่นอนเป็น "ความชั่วร้าย" (เช่นในคำตอบของคำถามนี้) ปัญหาที่เกิดขึ้นจริงกับความไม่แน่นอนและ structs ใน C # คืออะไร?


16
ประเภทไม่เปลี่ยนรูป vs ไม่แน่นอน
ฉันสับสนในสิ่งที่ไม่เปลี่ยนรูปแบบ ฉันรู้ว่า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?
ใครสามารถแก้ไขnametupleหรือจัดเตรียมคลาสทางเลือกเพื่อให้ทำงานกับวัตถุที่เปลี่ยนแปลงได้? เพื่อความสามารถในการอ่านเป็นหลักฉันต้องการสิ่งที่คล้ายกับ 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
เป็นจำนวนเต็มไม่เปลี่ยนรูป
ฉันรู้ว่านี่อาจจะโง่มาก แต่หลายแห่งอ้างว่าคลาส Integer ใน Java ไม่เปลี่ยนรูป แต่รหัสต่อไปนี้: Integer a=3; Integer b=3; a+=b; System.out.println(a); ดำเนินการโดยไม่มีปัญหาใด ๆ ให้ผลลัพธ์ (ที่คาดหวัง) 6. ดังนั้นค่าของ a จึงเปลี่ยนไปอย่างมีประสิทธิภาพ ไม่ได้หมายความว่าจำนวนเต็มไม่แน่นอน? คำถามรองและนอกหัวข้อเล็กน้อย: "คลาสที่ไม่เปลี่ยนรูปไม่จำเป็นต้องมีตัวสร้างการคัดลอก" ใครสนใจที่จะอธิบายว่าทำไม?

7
คอลเล็กชันที่ไม่เปลี่ยนรูป / เปลี่ยนรูปได้ใน Swift
ฉันอ้างถึงคู่มือการเขียนโปรแกรม Swift ของ Apple เพื่อทำความเข้าใจการสร้างวัตถุที่เปลี่ยนแปลงไม่ได้ / ไม่เปลี่ยนรูป (Array, Dictionary, Sets, Data) ในภาษา Swift แต่ฉันไม่เข้าใจวิธีสร้างคอลเล็กชันที่ไม่เปลี่ยนรูปใน Swift ฉันต้องการดูสิ่งที่เทียบเท่าใน Swift สำหรับสิ่งต่อไปนี้ใน Objective-C อาร์เรย์ที่ไม่เปลี่ยนรูป 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", …

6
ผันผวนและเปลี่ยนแปลงได้ใน C ++
ฉันมีคำถามเกี่ยวกับความแตกต่างระหว่างความผันผวนและความผันแปร ฉันสังเกตว่าทั้งสองอย่างนั้นหมายความว่ามันสามารถเปลี่ยนแปลงได้ อะไรอีก? พวกเดียวกันหรือเปล่า? อะไรคือความแตกต่าง? ใช้ได้ที่ไหน? เหตุใดจึงเสนอแนวคิดทั้งสองนี้ วิธีการใช้งานที่แตกต่างกัน? ขอบคุณมาก.
86 c++  volatile  mutable 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.