[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:backend\u002Fpython-memory-performance":4,"config":254},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":148,"samples":168},"backend","Backend","","python-memory-performance","Python Memory Performance","en",75,3300,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,133,136,139,142,145],{"key":19,"name":20,"count":11},"api-design","API Design",{"key":22,"name":23,"count":11},"caching","Caching",{"key":25,"name":26,"count":11},"concurrency","Concurrency",{"key":28,"name":29,"count":11},"csharp-concurrency-async","Csharp Concurrency Async",{"key":31,"name":32,"count":11},"csharp-exceptions","Csharp Exceptions",{"key":34,"name":35,"count":11},"csharp-generics-interfaces","Csharp Generics Interfaces",{"key":37,"name":38,"count":11},"csharp-memory-performance","Csharp Memory Performance",{"key":40,"name":41,"count":11},"csharp-stdlib-http","Csharp Stdlib Http",{"key":43,"name":44,"count":11},"csharp-testing-tooling","Csharp Testing Tooling",{"key":46,"name":47,"count":11},"databases-sql","Databases \u002F SQL",{"key":49,"name":50,"count":11},"go-concurrency","Go Concurrency",{"key":52,"name":53,"count":11},"go-errors","Go Errors",{"key":55,"name":56,"count":11},"go-interfaces-generics","Go Interfaces Generics",{"key":58,"name":59,"count":11},"go-memory-performance","Go Memory Performance",{"key":61,"name":62,"count":11},"go-stdlib-http","Go Stdlib Http",{"key":64,"name":65,"count":11},"go-testing-tooling","Go Testing Tooling",{"key":67,"name":68,"count":11},"java-concurrency","Java Concurrency",{"key":70,"name":71,"count":11},"java-exceptions","Java Exceptions",{"key":73,"name":74,"count":11},"java-generics-interfaces","Java Generics Interfaces",{"key":76,"name":77,"count":11},"java-memory-jvm","Java Memory Jvm",{"key":79,"name":80,"count":11},"java-stdlib-http","Java Stdlib Http",{"key":82,"name":83,"count":11},"java-testing-tooling","Java Testing Tooling",{"key":85,"name":86,"count":11},"messaging-queues","Messaging \u002F Queues",{"key":88,"name":89,"count":11},"networking-http","Networking \u002F HTTP",{"key":91,"name":92,"count":11},"nodejs-error-handling","Nodejs Error Handling",{"key":94,"name":95,"count":11},"nodejs-event-loop-async","Nodejs Event Loop Async",{"key":97,"name":98,"count":11},"nodejs-memory-performance","Nodejs Memory Performance",{"key":100,"name":101,"count":11},"nodejs-modules-streams","Nodejs Modules Streams",{"key":103,"name":104,"count":11},"nodejs-stdlib-http","Nodejs Stdlib Http",{"key":106,"name":107,"count":11},"nodejs-testing-tooling","Nodejs Testing Tooling",{"key":109,"name":110,"count":11},"php-concurrency-async","Php Concurrency Async",{"key":112,"name":113,"count":11},"php-exceptions","Php Exceptions",{"key":115,"name":116,"count":11},"php-generics-interfaces","Php Generics Interfaces",{"key":118,"name":119,"count":11},"php-memory-performance","Php Memory Performance",{"key":121,"name":122,"count":11},"php-stdlib-http","Php Stdlib Http",{"key":124,"name":125,"count":11},"php-testing-tooling","Php Testing Tooling",{"key":127,"name":128,"count":11},"python-concurrency-async","Python Concurrency Async",{"key":130,"name":131,"count":11},"python-errors-context","Python Errors Context",{"key":8,"name":9,"count":11},{"key":134,"name":135,"count":11},"python-stdlib-http","Python Stdlib Http",{"key":137,"name":138,"count":11},"python-testing-tooling","Python Testing Tooling",{"key":140,"name":141,"count":11},"python-typing-oop","Python Typing Oop",{"key":143,"name":144,"count":11},"security","Security",{"key":146,"name":147,"count":11},"testing","Testing",[149,153,156,159,162,165],{"key":150,"name":151,"count":152},"csharp","C#\u002F.NET",450,{"key":154,"name":155,"count":152},"go","Go",{"key":157,"name":158,"count":152},"java","Java",{"key":160,"name":161,"count":152},"nodejs","Node.js",{"key":163,"name":164,"count":152},"php","PHP",{"key":166,"name":167,"count":152},"python","Python",[169,187,201,214,227,240],{"id":170,"topic":9,"difficulty":171,"body":172,"options":173,"correct_key":178,"explanation":186},"019f6c9d-372d-7430-8474-be19b570443b",1,"```python\nx = [1, 2, 3]\ny = x\ndel x\n```\nAfter this code runs, what happens to the list `[1, 2, 3]`?",[174,177,180,183],{"key":175,"text":176},"a","It is deleted immediately, since `del x` removes the list object itself",{"key":178,"text":179},"b","It stays alive, since `y` still references it and the refcount only drops from 2 to 1",{"key":181,"text":182},"c","Only the cycle-detecting collector can decide this; refcounting plays no role here",{"key":184,"text":185},"d","`del x` raises an error, since deleting a name while another name still references the same object is forbidden","`del x` removes the binding of the name `x`, decrementing the object's reference count by one. Since `y` still points to the same list, its refcount only drops from 2 to 1, so CPython keeps the object alive. The list would only be deallocated once its refcount reaches 0, i.e. when `y` also stops referencing it.",{"id":188,"topic":9,"difficulty":189,"body":190,"options":191,"correct_key":175,"explanation":200},"019f6c9d-372d-7adb-8c44-bc287626449c",2,"```python\nimport sys\n\na = []\nb = a\nprint(sys.getrefcount(a))\n```\nWhat does the printed number represent here?",[192,194,196,198],{"key":175,"text":193},"Every reference to the list, including the call's own temporary one (always created) — typically 3",{"key":178,"text":195},"Only `a` and `b`, since the call itself rarely counts as a reference — typically 2",{"key":181,"text":197},"Always 1, no matter how many names alias the same object",{"key":184,"text":199},"It raises `TypeError`, since lists are unhashable","`sys.getrefcount(obj)` reports the reference count of `obj` at the moment it is called, but passing `obj` as an argument itself creates one extra, temporary reference for the duration of the call. So with `a` and `b` both bound to the same list, the count typically comes out as 3 (`a`, `b`, and the call's own temporary reference), not 2.",{"id":202,"topic":9,"difficulty":189,"body":203,"options":204,"correct_key":184,"explanation":213},"019f6c9d-372e-71bc-b44e-27ca800ff2b9","```python\ndef f():\n    x = [1, 2, 3]\n    return None\n\nf()\n```\nAfter `f()` returns, what happens to the list created inside it?",[205,207,209,211],{"key":175,"text":206},"It stays in memory until the program exits, since Python is not expected to free locals early",{"key":178,"text":208},"It moves into a global object cache to be reused by later calls",{"key":181,"text":210},"It stays reachable forever through `gc.get_objects()`",{"key":184,"text":212},"Its refcount drops to 0 once the frame is destroyed, so CPython frees it right away","The only reference to the list is the local name `x`. Once `f()` returns, its stack frame (and the local variables it held) is destroyed, so `x`'s reference to the list disappears. With refcount reaching 0, CPython's reference-counting collector frees the list immediately — there is no need to wait for a garbage collection cycle for this simple, non-circular case.",{"id":215,"topic":9,"difficulty":189,"body":216,"options":217,"correct_key":181,"explanation":226},"019f6c9d-372e-7705-9d9b-2b7dbd9b2091","Two objects `a` and `b` end up referencing each other (`a.other = b`, `b.other = a`), and no other name in the program references either of them. Why doesn't reference counting alone free them?",[218,220,222,224],{"key":175,"text":219},"Reference counting eventually reaches 0 on its own after enough time passes",{"key":178,"text":221},"Circular references are forbidden and raise an error as soon as they are created",{"key":181,"text":223},"Each refcount stays above 0 forever, so only the `gc` cycle collector can reclaim them",{"key":184,"text":225},"CPython silently converts such circular references into weak references to prevent leaks","Even with no external names pointing at `a` or `b`, `a` still holds a reference to `b` and `b` still holds a reference to `a`, so neither refcount ever reaches 0 through pure reference counting. This is exactly the case the generational cycle-detecting garbage collector (`gc` module) exists for: it periodically looks for groups of objects that are only reachable from each other and reclaims them.",{"id":228,"topic":9,"difficulty":189,"body":229,"options":230,"correct_key":175,"explanation":239},"019f6c9d-372f-7075-8d6a-145b30e0fc17","```python\nclass Node:\n    def __init__(self):\n        self.other = None\n\na = Node()\nb = Node()\na.other = b\nb.other = a\n\ndel a\ndel b\n```\nAfter `del a; del b`, are the two `Node` objects freed immediately by reference counting alone?",[231,233,235,237],{"key":175,"text":232},"No — each keeps a refcount of 1 from the other, until the cycle collector runs",{"key":178,"text":234},"Yes, `del` typically forces immediate deallocation no matter how many references exist",{"key":181,"text":236},"Yes, Python detects self-referencing attributes and nulls them on `del`",{"key":184,"text":238},"No, and they will never be freed for the rest of the process's lifetime","Deleting the names `a` and `b` removes the *external* references, but `a.other` still points at `b` and `b.other` still points at `a`. Each object's refcount only drops from 2 to 1, never to 0, so plain reference counting cannot reclaim them. They remain garbage until the generational `gc` collector runs (automatically at some point, or via an explicit `gc.collect()`), at which point it recognizes the isolated cycle and frees both.",{"id":241,"topic":9,"difficulty":242,"body":243,"options":244,"correct_key":181,"explanation":253},"019f6c9d-372f-779d-a502-c60b93e4a88f",3,"A batch job calls `gc.disable()` at startup to shave off collection overhead in a hot loop. Weeks later, memory usage grows steadily over long runs, and a memory profiler shows many `Node`-like objects that reference each other (parent\u002Fchild back-references) piling up. What is the most likely explanation?",[245,247,249,251],{"key":175,"text":246},"`gc.disable()` only turns off generation 2; younger cycles are still collected automatically",{"key":178,"text":248},"The growth is unrelated to `gc.disable()`; it must be a C extension leak instead",{"key":181,"text":250},"`gc.disable()` turns off the cycle collector entirely, so new cycles simply leak",{"key":184,"text":252},"`gc.disable()` only suppresses `gc` debug statistics printing, not collection itself","`gc.disable()` stops the automatic generational cycle collector from ever running. Reference counting still reclaims non-circular garbage as usual, but any object cycles (like parent\u002Fchild back-references) will simply never be freed on their own once the collector is off — they sit in memory until either `gc.enable()` is called and a cycle eventually runs, or `gc.collect()` is invoked explicitly. For code that relies on cyclic structures, disabling `gc` for a performance win trades that win for a slow, steady memory leak.",{"fields":255,"seniorities":424,"interview_shapes":425,"locales":430,"oauth":432,"question_count":435,"coach_enabled":436,"jd_match_enabled":436},[256,267,287,303,327,340,359,378,398,405,411,418],{"key":5,"name_tr":6,"name_en":6,"sort":171,"specializations":257},[258,261,262,263,264,265,266],{"key":259,"name":260,"field":5},"general","Genel",{"key":154,"name":155,"field":5},{"key":166,"name":167,"field":5},{"key":157,"name":158,"field":5},{"key":150,"name":151,"field":5},{"key":160,"name":161,"field":5},{"key":163,"name":164,"field":5},{"key":268,"name_tr":269,"name_en":269,"sort":189,"specializations":270},"frontend","Frontend",[271,272,275,278,281,284],{"key":259,"name":260,"field":268},{"key":273,"name":274,"field":268},"javascript","JavaScript",{"key":276,"name":277,"field":268},"typescript","TypeScript",{"key":279,"name":280,"field":268},"react","React",{"key":282,"name":283,"field":268},"vue","Vue",{"key":285,"name":286,"field":268},"angular","Angular",{"key":288,"name_tr":289,"name_en":289,"sort":242,"specializations":290},"fullstack","Fullstack",[291,292,293,294,295,296,297,298,299,300,301,302],{"key":259,"name":260,"field":288},{"key":154,"name":155,"field":5},{"key":166,"name":167,"field":5},{"key":157,"name":158,"field":5},{"key":150,"name":151,"field":5},{"key":160,"name":161,"field":5},{"key":163,"name":164,"field":5},{"key":273,"name":274,"field":268},{"key":276,"name":277,"field":268},{"key":279,"name":280,"field":268},{"key":282,"name":283,"field":268},{"key":285,"name":286,"field":268},{"key":304,"name_tr":305,"name_en":305,"sort":306,"specializations":307},"devops-cloud","DevOps \u002F Cloud",4,[308,309,312,315,318,321,324],{"key":259,"name":260,"field":304},{"key":310,"name":311,"field":304},"aws","AWS",{"key":313,"name":314,"field":304},"gcp","GCP",{"key":316,"name":317,"field":304},"azure","Azure",{"key":319,"name":320,"field":304},"kubernetes","Kubernetes",{"key":322,"name":323,"field":304},"terraform","Terraform",{"key":325,"name":326,"field":304},"linux","Linux",{"key":328,"name_tr":329,"name_en":329,"sort":330,"specializations":331},"ai-engineer","AI Engineer",5,[332,333,334,337],{"key":259,"name":260,"field":328},{"key":166,"name":167,"field":328},{"key":335,"name":336,"field":328},"llm-rag","LLM\u002FRAG",{"key":338,"name":339,"field":328},"mlops","MLOps",{"key":341,"name_tr":342,"name_en":343,"sort":344,"specializations":345},"database","Veritabanı","Database",6,[346,347,350,353,356],{"key":259,"name":260,"field":341},{"key":348,"name":349,"field":341},"postgresql","PostgreSQL",{"key":351,"name":352,"field":341},"mysql","MySQL",{"key":354,"name":355,"field":341},"mongodb","MongoDB",{"key":357,"name":358,"field":341},"redis","Redis",{"key":360,"name_tr":361,"name_en":362,"sort":363,"specializations":364},"mobile","Mobil","Mobile",7,[365,366,369,372,375],{"key":259,"name":260,"field":360},{"key":367,"name":368,"field":360},"ios-swift","iOS (Swift)",{"key":370,"name":371,"field":360},"android-kotlin","Android (Kotlin)",{"key":373,"name":374,"field":360},"flutter","Flutter",{"key":376,"name":377,"field":360},"react-native","React Native",{"key":143,"name_tr":379,"name_en":144,"sort":380,"specializations":381},"Güvenlik",8,[382,383,386,389,392,395],{"key":259,"name":260,"field":143},{"key":384,"name":385,"field":143},"appsec","AppSec",{"key":387,"name":388,"field":143},"offensive-pentest","Offensive \u002F Pentest",{"key":390,"name":391,"field":143},"cloud-security","Cloud Security",{"key":393,"name":394,"field":143},"devsecops","DevSecOps",{"key":396,"name":397,"field":143},"blue-team-incident","Blue Team \u002F Incident",{"key":399,"name_tr":400,"name_en":401,"sort":402,"specializations":403},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[404],{"key":259,"name":260,"field":399},{"key":406,"name_tr":407,"name_en":407,"sort":408,"specializations":409},"data-engineer","Data Engineer",10,[410],{"key":259,"name":260,"field":406},{"key":412,"name_tr":413,"name_en":414,"sort":415,"specializations":416},"game-dev","Oyun Geliştirme","Game Development",11,[417],{"key":259,"name":260,"field":412},{"key":419,"name_tr":420,"name_en":420,"sort":421,"specializations":422},"ml-engineer","ML Engineer",12,[423],{"key":259,"name":260,"field":419},[14,15,16],{"junior":426,"mid":428,"senior":429},{"questions":427,"median_sec":3},20,{"questions":427,"median_sec":3},{"questions":427,"median_sec":3},[431,10],"tr",[433,434],"google","github",21750,true]