Bitcoin seems to have the concept of a wallet and an address. Are they the same thing? If not, how do they differ?
Addresses are public-key hashes of an asymmetric key pair
An address represents a hash of a public key of an asymmetric key pair.¹ The owner of the key pair can use the private key to sign transactions or messages (for example in order to prove ownership). Only by using the correct private key a valid signature may be created, which then anyone can verify as valid by using the associated address (which, again, represents the public key).
Wallets are an abstract concept, a "keyring"
A wallet is an abstract construct, which contains the set of public and private key pairs randomly generated for the user. In a deterministic wallet, the keys are derived from a passphrase (a specific seed, masterkey or password) instead of a random seed. Essentially, it corresponds to a keyring in the cryptographic sense.
The Bitcoin client software abstracts the wallet for the user such that it checks each of the addresses contained in the wallet, whether there are any balances (transaction outputs) associated in the blockchain with them. It sums the funds up and presents them as a single total balance. Underlying, however, these balances are stored publicly in the blockchain (that's right, the wallet doesn't contain your coins, it just allows you to spend them). They are split up to numerous addresses and transaction outputs:
- Address #15521² has
- 3 BTC in transaction output 1
- Address #23414 has
- 1.2 BTC in transaction output 1
- 0.7 BTC in transaction output 2
Everyone can see them, however, usually can't determine the identity of the owner.
¹ To be more accurate an address is a Base58-encoded hash of the public key.
A wallet and an address are not the same thing.
An address is a Bitcoin public key to which transactions can be sent. This concept is present in the Bitcoin protocol itself.
A wallet is a collection of private keys that correspond to addresses. A private key is necessary to spend from an address. The concept of a wallet is present only in Bitcoin clients. The format of the wallet is stereotypically a text file on disk, but may differ between clients and have highly important features such as encryption and address labeling.
Terminology-wise, one sends Bitcoin to or receives it from an address and one encrypts, exports, backs up, and imports their wallet.