12.21 Mini Projects
Four small set-based projects -- a duplicate log analyzer, an inventory comparator, a firewall rule comparator built on …
Four small set-based projects -- a duplicate log analyzer, an inventory comparator, a firewall rule comparator built on …
Practice programs reinforcing Python set concepts -- a duplicate remover, a unique-visitor counter built on len(set(...)), and a package …
Frequently asked and scenario-based Python set interview questions covering set vs. frozenset, why {} is a dict and not a set, hashability, …
When automatic deduplication and mathematical set operations make a set the right choice, why converting a checked-against collection to a …
The most common set bugs -- writing {} and silently getting a dict instead of an empty set, putting an unhashable type like a list into a …
Five places sets are the natural fit in infrastructure code -- deduplicating IP addresses from logs, comparing installed vs. required …
Reading unique values directly into a set with a comprehension over file lines, sorting before writing since sets have no guaranteed order, …
The set-based patterns behind removing duplicates, extracting unique elements, finding common items between two lists, and computing the …
A time-complexity table for the core set operations, why a set uses more memory per element than a list or tuple, and a direct timeit …
The same comprehension syntax as list comprehensions, but with {} instead of [], automatically deduplicating the result -- basic, …
frozenset -- the immutable counterpart to set -- same union/intersection/membership behavior, but no add(), remove(), or update(), which is …
Visiting every element of a set with a for loop and with enumerate() -- and why the indices enumerate() produces are meaningless as …
The same general-purpose sequence functions used with lists and tuples -- len, max, min, sum, sorted, any, all -- work identically on sets, …
Method equivalents of union/intersection/difference/symmetric_difference, plus the relationship-testing methods with no operator form -- …
Union (|), intersection (&), difference (-), and symmetric difference (^) as real mathematical set operations applied directly to Python …
Why s[0] raises TypeError on a set -- elements are located by hash, not by integer position -- and why iteration order is an implementation …
remove() vs discard() -- the same removal, but one raises KeyError on a missing value and the other doesn't -- plus pop()'s …
add() for a single element that silently no-ops on a duplicate, update() for merging in one or more other iterables at once, and how that …
Why a set is a hash table internally -- how hash(element) determines a slot directly, why that's what makes membership testing O(1) average, …
Why an empty set must use set() instead of {}, set literals, the set() constructor's automatic deduplication, and building sets from lists, …
What a set is, its core characteristics, why automatic deduplication and O(1) average membership testing are the entire reason it exists as …
Practice programs reinforcing Python tuple concepts -- combining concatenation and membership, the packing/unpacking swap idiom, a …
Frequently asked and scenario-based Python tuple interview questions covering tuple vs list, why (1) isn't a tuple, hashability, and classic …
When to reach for a tuple over a list, using unpacking to make multi-value returns and record access self-documenting, and a quick decision …
The most common tuple bugs -- forgetting the trailing comma on a single-element tuple, trying to modify a tuple like a list, and being …
Reading and writing tuples via plain text and CSV, plus five real infrastructure patterns where tuples are the right fit specifically …
Searching, counting, and finding the max/min of a tuple use the exact same techniques as a list -- the only real difference is that a tuple …
A direct tuple vs list comparison across memory, hashability, spare capacity, and method count -- and why creating a tuple literal is …
Why tuples are immutable by design, the concrete benefits that follow -- thread safety, hashability, communicated intent -- why a tuple …
Creating and accessing nested tuples with chained indices, and why a tuple's immutability is shallow, not deep -- a mutable object held in …
The general-purpose sequence functions -- len, max, min, sum, sorted, any, all -- work identically on tuples and lists, plus the three …
Why a tuple has exactly two methods, count() and index(), and how that short list is a direct, mechanical consequence of immutability -- …
Concatenation and repetition always build a brand-new tuple since neither can mutate, membership testing with in, and lexicographic …
How comma-separated values automatically pack into a tuple, how assigning a tuple to several names unpacks it, the temp-variable-free swap …
Indexing and slicing rules identical to lists and strings, plus the one genuine difference: t[:] on a tuple returns the SAME object rather …
Empty tuples, why a single-element tuple requires a trailing comma, tuple literals, the tuple() constructor, and nested or mixed-type …
What a tuple is, its core characteristics, why immutability is a feature rather than a limitation, and how CPython allocates exactly enough …
Practice programs reinforcing Python list concepts -- an inventory manager class, a todo app, a log analyzer, a CSV processor, and mini …
Frequently asked and scenario-based Python list interview questions covering list vs tuple, append() vs insert(), sort() vs sorted(), …
Preferring a list comprehension over a manual loop when it stays readable, choosing append() over insert(0, ...), converting to a set for …
The most common list bugs in Python -- off-by-one IndexError, silently skipping elements by mutating a list while iterating over it, and the …
Lists as the natural in-memory shape of file and log contents, plus real infrastructure patterns -- server inventories, filtering Amazon EC2 …
Classic list algorithms built from tools covered earlier in this chapter -- reverse, order-preserving deduplication with dict.fromkeys(), …
The time complexity of every core list operation, why a list uses somewhat more memory than an equivalent tuple, and why append() is O(1) …
sort() vs sorted() -- in-place versus a new list -- plus linear search (works on any list, O(n)) and binary search (requires a sorted list, …
Why b = a shares one list instead of copying it, the list-specific shallow-copy shortcuts (copy() and l[:]), how mutation is visible through …
Creating, accessing, and updating nested lists using chained indices, iterating a 2D matrix row by row, and why [[0]*n]*n builds a matrix of …
Four idiomatic ways to visit every element of a list -- for, while, enumerate(), and zip() -- plus list comprehensions as the compact, …
Global functions that accept a list as an argument -- len(), max(), min(), sum(), sorted(), any(), and all() -- as distinct from methods …
A consolidated reference for every built-in list method, grouped by what it does -- add (append, extend, insert), remove (remove, pop, …
Concatenation and repetition build brand-new lists, membership testing is a linear scan, and comparison works element-by-element and …
The four ways to remove items from a list -- remove() by value, pop() by index (which returns what it removes), clear() to empty it, and the …
Updating an element by index, growing a list with append() and extend(), inserting at a position, and replacing a whole range at once with …
Positive and negative indexing, chaining indices into nested lists, IndexError, and slicing with l[start:stop:step] -- including reversal, …
Empty lists, list literals, the list() constructor, splitting a string into characters, materializing a range(), and building nested or …
What a list is, its core characteristics, why it's Python's general-purpose array, and how it's actually stored in memory as a resizable, …
Practice programs reinforcing Python string concepts -- a log-level analyzer, an IP address extractor, a config file parser, and a password …
Frequently asked and scenario-based Python string interview questions covering immutability, slicing, join() vs +=, and classic coding …
The most common string bugs in Python -- expecting a method to mutate in place, mismatching find() and index() error behavior, off-by-one …
Reaching for join() instead of += in loops, f-strings as the default formatting choice, comparing strings with == rather than is, and …
The standard raw-text-to-structured-fields pipeline applied to real infrastructure text -- Apache/Nginx/syslog parsing, Amazon Resource …
Why string immutability makes join() outperform += in a loop by turning O(n^2) into O(n), PEP 393's variable-width memory representation, …
The re module -- match() vs search(), findall()/finditer(), sub()/split(), pattern compilation, capture groups and named groups, and …
Classic string algorithms built from the operators and methods covered earlier -- reverse, palindrome and anagram checks, character …
Built-in functions that operate on strings from the outside -- len(), max(), min(), sorted(), chr(), ord(), ascii(), repr(), and str() -- as …
The str type's built-in method set grouped by purpose -- case conversion, searching, validation, modification, splitting/joining, alignment, …
The three ways to format strings in Python -- percent-style, str.format(), and f-strings -- plus alignment, padding, number/currency/date …
Concatenation, repetition, membership testing, comparison, lexicographical ordering, iteration, and len() — the operators that work directly …
Positive and negative indexing, slicing with s[start:stop:step], why slicing never raises IndexError, extended slicing for reversal, and …
The full table of Python string escape sequences, including the less common octal and hex character codes, expanding on the introductory …
Single, double, and triple quotes, multiline and empty strings, raw strings for paths and regex, and why every Python 3 str is Unicode by …
What a string is, why it's the universal interface between a program and the outside world, how it's represented in memory, and why …
Practice programs reinforcing Python type conversion concepts — a safe user input converter, a resilient CSV parser, and a log analyzer that …
Frequently asked and scenario-based Python type conversion interview questions covering implicit vs explicit conversion, int(3.9), …
The most common type conversion bugs in Python — parsing a decimal string with int() directly, silent data loss from float to int, and the …
Choosing the right target type, converting once as early as possible instead of repeatedly, and treating validation of untrusted input as …
Where type conversion shows up constantly in real infrastructure scripts — environment variables, config files, AWS API responses, log …
Why input(), CSV, JSON, and YAML data all require explicit conversion on the way in — and the specific gap between JSON's real type …
Why every type conversion creates a brand-new object, the cost of re-converting the same value inside a loop, and why converting to a …
Wrapping a conversion in try/except so invalid input degrades gracefully instead of crashing, plus input validation and error handling as …
The three exception types behind nearly every conversion failure — ValueError, TypeError, and OverflowError — and the common causes that …
bool() as the explicit-casting form of truthy/falsy evaluation, and using type()/isinstance() to confirm a conversion actually produced what …
Converting between text and raw binary data with bytes(), bytearray(), and memoryview() — the conversion rules for each, not just what they …
Converting between list, tuple, set, frozenset, dict, and range — the standard deduplication idiom, and how each conversion function treats …
Converting numbers and collections to their string representation with str(), and why str() on a list or dict is debug-friendly but not what …
Converting to int, float, complex, and bool explicitly — why int() truncates toward zero instead of rounding, and how to round first when …
Manually requesting a type conversion by calling the target type as a function, why it's called 'casting', and the common real-world use …
How Python automatically promotes int to float in mixed arithmetic, why bool participates as a subclass of int, and why implicit conversion …
What type conversion is, why it's a core everyday skill, and why 'converting' a variable in Python really means creating a new object of the …
Practice programs reinforcing Python operator concepts — a CPU usage calculator, a disk usage alert, an HTTP status code classifier, and a …
Frequently asked and scenario-based Python operator interview questions covering is vs ==, short-circuit evaluation, precedence, / vs //, …
Writing readable operator expressions — avoiding overly complex conditions, naming intermediate booleans, and using parentheses even when …
Real-world operator patterns from DevOps scripts — CPU/disk threshold checks, log-level filtering, HTTP status classification, AWS resource …
Writing efficient operator-heavy code — preferring set membership over list membership, ordering short-circuit conditions deliberately, and …
The most common operator-related bugs in Python — using is instead of ==, confusing / with //, and misreading mixed comparison/logical …
How + and * change meaning across numbers, strings, lists, tuples, sets, and dicts — concatenation, repetition, union, intersection, and …
How Python evaluates chained comparisons like a < b < c internally, why the middle value is only evaluated once, and range-validation use …
Python's one-line conditional expression — value_if_true if condition else value_if_false — and why nested ternaries should stay shallow.
Truthy and falsy values in Python — the exact set of values that evaluate as False in a boolean context — and explicit bool() conversion.
The order Python applies operators in a mixed expression, associativity for same-precedence operators, why parentheses always win, and how …
Python's is and is not operators for comparing object identity rather than value, when to reach for them over == and !=, and how id() …
Python's in and not in operators for testing whether a value exists in a collection, and why converting to a set matters for repeated …
Python's bitwise operators — & | ^ ~ << >> — how they operate on an integer's binary representation, and the classic permission-flags bit …
Python's and, or, and not operators, their truth tables, and short-circuit evaluation — why the second operand is sometimes never executed …
Python's comparison operators — == != < > <= >= — comparison chaining, and comparing tuples lexicographically for version numbers.
The augmented assignment operators — += -= *= /= //= %= **= &= |= ^= <<= >>= — as shorthand for combining an operation with assignment in one …
Python's arithmetic operators — addition, subtraction, multiplication, true division, floor division, modulus, and exponentiation — with a …
What operators, operands, and expressions are in Python, why understanding precedence and short-circuiting matters, and where operators show …
Practice programs and mini projects for reinforcing Python variable and memory management concepts — UnboundLocalError, shallow vs deep …
Frequently asked and scenario-based Python interview questions covering references, shallow vs deep copy, UnboundLocalError, the LEGB rule, …
Practical habits for writing memory-safe, readable Python — meaningful names, avoiding global state, using constants, and memory-efficient …
The most common variable and memory-related bugs in Python — UnboundLocalError, shared mutable objects, variable shadowing, and assuming …
How configuration variables, environment variables, secrets, AWS credentials, and Terraform variables are managed in real DevOps Python …
How Python passes arguments into functions, why mutable and immutable arguments behave differently when modified inside a function, and the …
When a Python variable's lifetime begins and ends, how the del statement differs from letting a scope exit naturally, and how lifetime …
Local, global, and enclosing scope in Python, the global and nonlocal keywords, and the LEGB rule Python uses to resolve any name.
CPython's automatic object-reuse optimizations — string interning and small integer caching — why they exist, and why they're implementation …
How CPython's reference-counting memory manager works, why a supplementary cyclic garbage collector exists for reference cycles, and how to …
The difference between assignment, a shallow copy, and a deep copy in Python, when each is appropriate, and how the copy module's copy() and …
Why all assignment in Python is reference assignment, why there's no true separate value-assignment mechanism, and how that plays out …
How CPython splits memory between the call stack (frame references) and the heap (actual object data), and why that split explains reference …
Why a Python variable is a label pointing at an object rather than a box holding a value, what that means for reference assignment, and why …
What a variable really is underneath the syntax, why that matters for memory behavior, and a map of the deeper reference, memory, and scope …
Practice programs and mini projects for reinforcing Python data type concepts — type counting, deduplication, the mutable default bug, JSON …
Frequently asked and scenario-based Python data type interview questions covering list vs tuple, bool as an int subclass, mutable defaults, …
Best practices for working with Python data types — readability, consistency, and choosing efficient data structures.
Three type-related mistakes that catch even experienced developers off guard — unexpected type changes, the mutable default argument bug, …
Where Python's built-in data types show up in real infrastructure tooling — configuration data, JSON, API responses, AWS/boto3 resources, …
How to pick the right Python data type for a given piece of data based on performance and memory, with a real-world selection table.
How Python stores objects on the heap, why a variable is a reference rather than a box holding a value, and how CPython's reference-counting …
Implicit type conversion (int promoted to float in mixed arithmetic) vs explicit casting with int(), float(), and str() in Python.
type() vs isinstance() for checking an object's type, why isinstance() is preferred for validation because it handles subclassing, and what …
The difference between mutable and immutable objects in Python, which built-in types fall into each category, and how identity (id()) …
Python's None singleton, why it's distinct from 0 and an empty string, and why you should always compare to None with is, not ==.
Python's binary types — bytes, bytearray, and memoryview — for working with raw, non-text data like files, sockets, and cryptographic …
Python's set and frozenset — unordered collections of unique, hashable values — and the classic one-line list-deduplication pattern.
Python's dict — the built-in hash map, its key-value pairs, and the real-world use cases where dictionaries are the natural data structure.
Python's four sequence types — str, list, tuple, and range — their mutability differences, typical uses, and the shared operations that work …
Python's four numeric types — int, float, complex, and bool — with type conversion and the core arithmetic operators.
Why everything in Python is an object, and the three properties every object has — identity, type, and value — with id() and type() …
What data types are, why choosing the right one matters, how dynamic typing works, and real-world examples of Python values mapped to their …
Frequently asked Python syntax interview questions and practical coding exercises, covering keywords, identifiers, indentation, …
A short checklist distilled from every Python syntax rule in this chapter — readable code, meaningful names, consistent formatting, and …
Correct Python syntax applied in realistic DevOps scripts — a configuration module, a log-cleanup automation script, a log-processing …
Five error types beginners hit most often — IndentationError, SyntaxError, NameError, missing colons, and unmatched brackets — with what …
PEP 8 from the syntax angle — indentation, line length, naming conventions, import ordering, and whitespace rules that affect how Python …
The semicolon, backslash, and implicit-bracket ways to bend Python's line-based syntax — combining statements onto one line or splitting one …
The four kinds of Python code blocks — if, loop, function, and class blocks — and how they all follow the same colon-and-indentation rule.
The full table of Python escape sequences — newline, tab, backslash, quotes, carriage return, and backspace — with examples of each.
Python print() in detail: syntax, formatting, separators, streams, files, JSON, logging, and practical AWS, Kubernetes, Docker, and CI/CD …
Python input() in detail: syntax, type conversion, validation, multiple values, piped stdin, and practical AWS, Kubernetes, Docker, and …
Numeric, string, boolean, None, and collection literals in Python — values written directly in source code, with type() examples for each.
Why Python has no language-enforced constants, the UPPER_SNAKE_CASE naming convention, and best practices for defining values that shouldn't …
Declaring variables without a separate declaration step, the assignment operator, multiple/chained assignment, and dynamic typing in Python.
The naming rules for Python identifiers, PEP 8 naming conventions, valid vs invalid identifier examples, and why reserved words can't be …
What Python keywords are, the complete keyword list for Python 3.12, using help('keywords'), and why keywords can't be used as identifiers.
Single-line comments, why Python has no dedicated multi-line comment syntax, docstrings and the __doc__ attribute, and best practices for …
Why indentation is part of Python's syntax rather than a style choice, the indentation rules, nested blocks, and the most common …
Simple statements vs compound statements in Python, placing multiple statements on one line, and splitting a long statement across multiple …
The conventional top-to-bottom layout of a Python file, how execution flows through it, the if __name__ == "__main__": entry-point guard, …
What Python syntax is, why it matters, how the interpreter reads a Python file top to bottom, and the difference between a syntax error and …
How to write a first Python program and run it on Windows, macOS, and Linux — creating the file, the python vs python3 vs py command …
How to install Python on Windows, Linux, and macOS, choosing an IDE, the four ways to run Python code, the CPython execution pipeline, …
What Python is, its history, key features, why it's worth learning, where it's applied in practice, and how it compares to Bash, Go, and …
Python script to find and delete unattached EBS volumes, unassociated Elastic IPs, and old AMIs, then produce a JSON cost-savings report.
Code examples covering structured logging, credential management, idempotent operations, environment configuration, Secrets Manager …
Python decorator that adds automatic retry logic with exponential backoff and jitter to any boto3 API call, handling ThrottlingException and …
Python utility function that handles pagination for any boto3 API call generically, with automatic NextToken handling, filtering support, …
Python script that uses AWS Organizations to list all accounts, assumes a cross-account role in each, audits security controls, and …
Python script to start an AWS CodePipeline execution, poll stage progress, and post real-time Slack notifications as each stage succeeds, …
Lambda function triggered by EventBridge to detect any AWS root account API activity in CloudTrail and immediately send a critical security …
Python script to deploy a new container image to an ECS service with rolling update strategy, monitor health, and automatically roll back if …
Python script to audit all VPC Security Groups, identify rules that expose sensitive ports to the internet, and optionally auto-remediate …
Python script to analyse EC2 on-demand spend via AWS Cost Explorer and surface Savings Plan and Reserved Instance purchase recommendations …
Python script to create an RDS snapshot before every deployment and restore the database from that snapshot (or to a specific point in time) …
Build robust retry logic for calls to an external payment API that occasionally returns 429 or 503, using exponential backoff with jitter.
Fix race conditions and corrupted data in a multithreaded Python service by using locks, thread-safe collections, and TTL caches.
Python script to create CloudWatch alarms for every running EC2 instance covering CPU utilization, status checks, memory usage (via …
Diagnose and fix a Python service being OOM-killed in Kubernetes by profiling memory growth and switching to streaming JSON parsing.
Python script to deploy or update a Lambda function, update environment variables, publish a new version, and create an alias with canary …
Reduce a 10-million-row CSV batch job from 4 hours to under 30 minutes using chunked bulk inserts and multiprocessing.
Python script that analyses CloudTrail logs for a given IAM role and generates a minimal IAM policy containing only the actions the role …
Python script to find all IAM users with access keys older than 90 days, create new keys, deactivate old ones, and notify users via AWS SES.
Diagnose and fix a Python ImportError caused by circular imports between modules, using module restructuring, lazy imports, and …
Python script to audit all S3 buckets for public access exposure, disabled versioning, missing encryption, and access logging gaps — with a …
Implement a sliding-window rate limiter with Redis and FastAPI middleware that enforces 100 requests per minute per API key.
Python script to sync a local directory to S3, encrypt every file with a KMS key, skip unchanged files via MD5 check, and produce a JSON …
Fix a FastAPI service that becomes unresponsive during image thumbnail generation by offloading CPU-bound work to a process pool or task …
Prevent duplicate username registrations in a FastAPI service caused by a check-then-insert race condition, using database constraints and …
Python script to find EC2 instances running for more than 7 days without a Project tag and send a compliance alert email using AWS SES.
Fix a Django REST endpoint responding in 8 seconds for 500 users by eliminating N+1 queries with annotate() and prefetch_related().
Write a Python boto3 script to snapshot all EBS volumes attached to running EC2 instances and automatically delete snapshots older than 30 …
30 multiple-choice questions covering Python syntax, data structures, OOP, decorators, generators, exceptions, and the standard library.
Diagnose and fix unbounded memory growth in a Python microservice using tracemalloc, replacing an unbounded module-level set with Redis TTL …
Write a Python boto3 script that reads the AutoStop=true tag on EC2 instances and automatically stops them at 8 PM and starts them at 8 AM — …
30+ Python interview questions for AWS and DevOps roles - boto3, Lambda, S3, automation scripting, CI/CD, Docker SDK, Kubernetes client, …
Learn Python for DevOps and cloud automation through clear milestones, practical labs, and interview revision.
Python interview questions covering data types, OOP, decorators, generators, asyncio, memory management, and common libraries — Basic to …